一,文字的粘贴复制与移动删除
1>,粘贴与复制
-----------------------------基本操作----------------------------------------------------
在命令模式下,以光标所在位置为参考
复制n个字符 -- nyl
复制n个字 -- nyw
复制n行 -- nyy
粘贴出复制的内容 -- p
-----------------------------寄存器相关---------------------------------------------------
复制n行到寄存器? -- ?nyy
复制n个字到寄存器? -- ?nyw
复制n个字符到寄存器? -- ?nyl
粘贴出寄存器?中的内容 -- ?p
(注,?为寄存器名字,用字母表示)
例,h10yy 复制10行到寄存器h,hp 将寄存器h中的内容粘贴到光标处。
----------------------------VISUAL模式下复制选中内容--------------------------------------
在命令模式下按‘V’进入VISUAL模式,方向键移动光标选中任何内容后
y 复制
d 剪切
例,选中后的效果
注,VISUAL模式中命令y或d后,会退回到vi的命令模式
然后再命令模式下 p 粘贴到指定位置
----------------------------复制内容到指定行-----------------------------------------------
复制n1n2行间的内容到n3行 -- :n1,n2 co n3
2>,移动
移动n1n2行间的内容到n3行 -- :n1,n2 m n3
3>,删除
在命令模式下,以光标所在位置为参考
删除一个字 -- dw
删除一字节 -- dl
删除一字符 -- x
删除一行 -- dd
删除 n行 -- ndd
删除n1到n2之间的内容(包括n1,n2) -- :n1,n2 d
注,ndd删除n行时,删除的内容放到了1号寄存器中,可以使用命令 1p 将删除的内容粘贴出来。
二,字符查找与替换
搜索---------------------------------------------------------------------------------------
向后搜索 -- /pattern
向前搜索 -- ?pattern
搜索与光标所在字符串相同的字符串 -- *
pattern为匹配模式,可以为正则表达式。
n 查找下一个,N查找上一个。
替换----------------------------------------------------------------------------------------
:s/p1/p2/ --当前行的第一个p1替换为p2
:s/p1/p2/g --当前行的所有p1替换为p2
:%s/p1/p2/g --每一行的所有p1替换为p2
:n1,n2s/p1/p2/g --n1,n2行之间的p1替换为p2
:n:$s/p1/p2/g --从第n行到最后一行的所有p1替换为p2
三,光标转跳与翻页
在命令模式下,
转跳到行首 -- gg
跳转到第n行 -- :n
转跳到最后一行 -- :$
转跳到与光标所在括号相匹配的反括号 -- %
转跳到光标所在行的行末 -- $
前翻半屏 -- ctrl + u
后翻半屏 -- ctrl + d
打开文件并定位到第n行 -- vi path/file +n
四,多文件编辑
vi file1 file2 在一个视窗中打开两个文件
:n 显示下一个文件,:N显示上一个文件。
CWW=ctrl+w+w
按CWW可以在当前显示文件和ToolBar之间切换,如图:
当切换到ToolBar时,可以按TAB键在不同文件上切换,并按ENTER可以选择进入。
vi file 在视窗中打开一个文件
:sp file2
:vsp file2
分别以水平分割或者垂直分割的方式在同一个窗口显示file2,效果如图
可以使用CWW命令在文件间切换,或者使用CW+k ,CW+j ,CW+h ,CW+l 切换到当前文件的上、下、左、右方向的文件窗口。
五,常用命令
FF 查看光标所在的函数
:set nu --显示行号
:set nonu --不显示行号
:set nohls --退出搜索标记
:set hls --添加搜索标记
:ls --查看当前缓冲区里的文件
V --进入行块选择模式
ctrl+V --进入列块选择模式
esc --进入命令模式
六,高级技巧
-------------------------------多行的缩进方法-------------------------------------------------------
光标所在行右移一个TAB -- >>
光标所在行左移一个TAB -- <<
光标所在的后n行右移一个TAB -- n>>
光标所在的后n行左移一个TAB -- n<< (注,包括光标所在行)
-------------------------------编辑模式下的“自动补齐”------------------------------------------------
说明,CX=ctrl +x , CL=ctrl +l 以此类推......
补全一个词 CP
例子,编辑到第4行,写入一个f 后,CP命令,结果如图,自动列出之前出现过的以f开头的字符串,此时可以通过上下键移动选中想要输入的单词并按ENTER键
完成输入。(此例选择flower)
补全一行 CX+CL = ctrl +x+l
例,编辑到第12行,输入if,CX+CL,如图,其余操作同上。
抄写上一行对应的字符 -- CY
抄写下一行对应的字符 -- CE
-------------------------------------添加和移除多行注释-----------------------------------------------
添加注释 ctrl+v +I+//(注释符)+esc
ctrl+v --开始选定注释内容,如图选中227行到250行。
接着,命令 I (注,大写I)进入insert模式,然后输入 注释符 “//”,最后按 esc。 结果如图
删除注释 ctrl+v + d
ctrl+v 选中多行注释符,d完成删除。
-------------------------------------十六进制编辑模式-----------------------------------------------------------
:%!xxd 切换到十六进制显示
:%!xxd -r 切换回文本状态
在十六进制显示下编辑时,只有同时改动右侧文本列和左侧对应的十六进制列后,再切换回文本状态,此时的改动才会生效,并通过:wq命令保存。
这是通过调用外部程序xxd完成的。