Vi 命令简单易懂讲解


目录

  1. 正文
  2. 打开文件进入编辑
  3. 注意当前模式
  4. 光标移动
  5. 插入内容
  6. 删除
  7. 撤销操作
  8. 拷贝粘贴
  9. 保存/退出
  10. 在两个文件中复制粘贴
  11. 搜索字符串
  12. 替换字符串

正文

下面介绍vi 的一般用法,本文适合初学者入门,但不适合作为手册进行查询,如果需要以命令导向的手册,请使用$ man vi|more

 

打开文件进入编辑

编辑一个文件:

$ vi example.txt

同时编辑多个文件:

$ vi file1 file2 ... fileN

如果使用vi 编辑的某个文件没有正常保存退出,会遗留一个隐含的文件:.filename.swp ,使用如下命令恢复从最后一次保存到非正常退出前所做的编辑:

$ vi -r filename

 

注意当前模式

进入文件编辑后,vi有四种模式,一种是插入模式(按键盘i 进入),这个模式下键盘输入会作为字符增加到文件中。

另一种是编辑模式,这个状态下可以直接输入命令来移动光标,删除字符等操作,不需要回车确认,每一个命令按键都会直接发生作用。在插入模式下按ESC 键会回到编辑模式。

第三种是命令模式,在编辑模式下按冒号":" 即进入命令模式,这时键盘输入的字符会出现在屏幕下方,回车后,命令执行。这个模式下可以输入保存、字符串搜索、退出编辑等命令。命令模式下,按回车或者ESC 键,回到编辑模式。

第四种是搜索模式,在编辑模式下输入斜杠"/" 或者问号"?" 即进入搜索模式。

上面的四种模式是我为了描述方便所起的名字,下面将引用到。

 

光标移动

光标的上、下、左、右移动,分别对应按键:k、j、h、l (编辑模式)。

定位到最后一行,输入大写G(编辑模式)。

回到第一行,输入小写g(编辑模式)。

跳到第n 行,在命令模式下输入数字n ,回车。

显示当前所在行数和列数,编辑模式下输入ctrl+g 。

 

插入内容

在当前字符前面插入内容,编辑模式下输入i ,进入了插入模式,然后输入内容,输入完成之后,按ESC 回到编辑模式。

在当前字符后面插入内容,编辑模式下输入a ,其它操作与上面相同。

在本行首插入内容,编辑模式下输入大写I 。其它操作与上面相同。

在本行尾追加内容,编辑模式下输入大写A 。其它操作与上面相同。

 

删除

删除当前光标的字符,编辑模式下输入x ,如果希望删除当前光标前面的字符,输入大写X 。

删除一行,编辑模式下连续两次输入d 。删除一个单词,编辑模式下依次输入dw 。

从当前光标删除至行尾,编辑模式下依次输入d$ 。

 

撤销操作

撤销刚才的一次修改,编辑模式下输入u ,撤销对这一整行的修改,输入大写U 。

如果希望撤销对文件的所有修改,命令模式下依次输入e! ,回车(输入冒号":" 进入命令模式,:e!)。

 

拷贝粘贴

拷贝一行内容,编辑模式下连续输入两次y 。

将剪贴板中的一行粘贴到当前行的后面,编辑模式下输入p 。

拷贝n 行内容,编辑模式下输入数字n(n是要拷贝的行数,从当前行算起),然后输入y ,拷贝完成,输入p 粘贴多行。

 

保存/退出

如果保存并关闭文件,命令模式下输入x ,回车即可。

如果保存,同时继续文件编辑,命令模式下输入w ,回车。

如果放弃所有更改,直接退出,命令模式下输入q! ,回车。

命令模式下输入wq 与x 等价。

 

在两个文件中复制粘贴

需要将file2 的某行粘贴到file1 中。

同时打开两个文件,中间用空格分隔:

$ vi file1.txt file2.txt

打开后当前编辑的为file1 ,在命令模式下输入n ,切换到file2。

找到相关行,编辑模式下输入yy ,再进入命令模式,输入大写N ,切换回上一个文件(以打开顺序为准),找到相关位置,编辑模式下输入p ,粘贴完毕。

 

搜索字符串

要搜索字符串abc ,在搜索模式下(编辑模式下输入斜杠"/" 或者问号"?" 即进入搜索模式),输入abc ,回车。

如果找到,光标会定位到从当前位置到第一个出现字符串abc 的位置,输入n 会跳到下一个abc 出现的位置,输入大写N ,跳到上一个abc 出现的位置。

斜杠"/" 与问号"?" 的区别,前者向后正向搜索,后者向前反向搜索。

 

替换字符串

要将当前行中的所有字符串abc 替换成efg ,命令模式下输入s/abc/efg/g ,回车。

上面命令只会替换abc 而不会替换ABC 或者aBc 。如果希望忽略大小写,加上参数i ,s/abc/efg/gi ,回车。

如果希望进行全文件范围替换,命令模式下输入%s/abc/efg/g ,回车。

如果替换的字符串中包含了例如斜杠"/" 这样的特殊字符,使用反斜杠"\" 转义。

命令模式下,输入%s/\/image/\/img/gi ,回车

以上命令会将文件中所有的字符串/image 替换成 /img ,并且不区分image 的大小写。

相关内容