VI编辑器技巧

openkk 12年前

vi其实是ex行编辑器的可视模式,ex编辑器每次默认显示一行,要在vi中使用ex命令需先输入:进入ex模式。

vi是visual editor,读作vee-eye

vi默认是命令模式的,vi一开始是命令模式的,此时所有按键都代表命令,在插入模式中你输入的东西都是文件内容,vi命令大小写有区别,/ 与?开始搜索命令,:用于开始所有的ex命令,因为vi只是可视化的ex行编辑器,保存文件可以用大写的ZZ 或者:wq等方式。:q! 与 :e! 可以恢复不保存修改的结果,q会推出vi编辑器,e还会直接留在vi中,:w nfilename 可以把缓冲区的内容保存在一个新文件中,:! linux-comm :进入ex编辑模式 !之后可以输入linux命令来查看一些信息。

在vi的命令模式下输入:sh 可以打开一个新的shell做完各种操作后,按ctrl-d或者exit即可回到原来的vi命令模式下,还有一种方法是ctrl-z暂停vi进入unix提示符下,然后fg可以回到vi中。

键盘上面hjkl四个键紧挨在一起,h:左移一个字符,l:右移一个字符,j:下移一行,k:上移一行,

w:一次移动一个单词,标点符号也算一个单词 W:也是一次移动一个单词,但是标点符号不算单词

b:一次倒退一个单词,标点符号也算一个单词 B:一次倒退一个单词,但是标点符号不算单词

G:可以移动到文件末尾行,2G、10G之类表示移动到第二,第十行

i插入 a添加(追加)的区别:

按下i插入时光标不会移动,所插入字符在光标之前显示,按下a时光标会后移一个字符,所插入字符在光标前显示,最总的效果是前者在光标之前加入字符,后者在光标之后加入字符。

c更改文本,当文本中有需要更改的文本时可以用c命令,在命令模式下用c?命令之后,会删除相关文本,自动进入插入模式,因为是修改嘛,?表示各种组合字符。

cw 删除从光标处到单词结尾的字符

c0 删除从光标处到本行开头的字符

c$ 删除从光标处到本行结尾(试验未成功)

cc 删除一整行文本,然后开始插入新文本

r 也是更改字符,一次更改一个字符,按下r后界面不会有任何变化,直接输入要变成的字符即可,一次只能改变一个字符,他不会进入插入模式,更改完毕后还是命令模式下

R 也是更改字符,他一次可以更改一整行字符,按下R后,屏幕底下会显示进入REPLACE模式

d 删除文本 d? ?可以是各种需要的文本对象

dw 删除一个单词,该单词紧跟的空格也会被删除,de删除一个单词,但是其后的空格会保留

dd 删除一整行,2dd、6dd表示删除2行、6行

x 删除一个字符 u可以撤销动作

vi 中移动文本就是删除+粘贴的组合,移动文本时文本先被删除放置在内存缓冲区中,接着移动到另一个位置,然后粘贴在新的位置上,粘贴命令就是p,小p将内容放在光标后,大P将内容放在光标前。

dd+p dd+P 将一行移动到某一行之后或之前

vi中复制文本就是拖拽+粘贴的组合,y拖拽命令也可以和其他命令组合表示复制多少内容,一般常用于复制一行yy+p

每一个操作命令和内容会存储到临时缓冲区直到下一个操作命令为止,因此我们可以用句号(.)重复利用这个命令,用p恢复内容。vi有9个删除缓冲区,最后一次删除的内容放置在缓冲区1,倒数第二次的是缓冲区2,以此类推,要恢复的话格式是:"np n代表第几个缓冲区,缓冲区的内容将出现在光标后。小规模的删除,行以内的不会保存在缓冲区。

vi有26个拖拽缓冲区(a-z命名),y与d可搭配26个字母使用,yy表示把一行复制放入缓冲区中,"cyy表示把内容放入名字为c的缓冲区,"c6yy表示吧后续6行内容放入名字为c的缓冲区,"cp 把名字是c的缓冲区的内容放在光标后, “cP 放入光标前 

 

J 大写 可以合并两行内容。6J 表示一次合并6行内容

上述只是入门了......

搜索模式:/ 向前搜做 ? 向后搜索 搜索模式会保留在会话中,可以用n/N 重复利用以前的搜索模式, n 同一个方向,N 反方向的搜索

G 跳转命令,默认的G跳转到文件末尾处,可以用行号在文件中移动光标到指定行,G接受行号作为参数进行跳转,输入两个反引号(``)即可跳转到之前行的光标处一对引号('')也可以跳回到原来的行处,不过光标位置不是原来的位置,而是在行首出闪烁。(在跳回之前行之间不能做其他操作才能用''、`` 进行返回)

用vi打开文件

vi file 打开文件,光标位置在行首

vi + file 在最后一行打开文件

vi +n file 在第N行打开文件

vi -/pattern file 打开文件在第一次匹配pattern处,如果模式有空格用''、"" 包围起来

vi -R file / view file 以只读模式打开文件,输入:w!会从只读模式转化成可写模式

vi -r 可以保存缓存区的内容,在系统死机崩溃后可以恢复文件