Unix / Linux – vi 编辑器

简介

UNIX操作系统自带的默认编辑器称为vi (visual editor)。

UNIX环境的备选编辑器包括pico和emacs,是GNU产品。

UNIX vi编辑器是一个全屏编辑器,有2种操作模式:

  • 命令模式 – 键盘输入命令
  • 插入模式 – 键盘输入文字

命令模式下,键入的字符都是命令,会对正在编辑的文件执行某些操作,有些命令可把vi编辑器切换到插入模式。在插入模式下,输入的每个字符都被添加到文件中;按下 (Escape)键将退出插入模式,回到命令模式。

虽然vi有许多命令,但对初学者来说,通常只需学习一小部分就够了。在下面的介绍中,对于最常用的命令都会标出来。

注意: UNIX和vi都是区分大小写的,确保不要搞混。

启动/退出vi

启动vi

如要用vi编辑文件,执行命令vi 文件名,打开文件编辑窗口。如果文件不存在,则创建一个空文件。

常用 vi filename 编辑文件(filename)
  vi -r filename 恢复系统崩溃时正在编辑的文件(filename)

退出vi

退出vi时,一般都会保存文件,当然也可不保存直接退出。

注意:只要键入冒号(:),光标就会移动到屏幕底部,在那里可以输入命令,回车执行。

常用 :x<回车> 退出vi,保存文件
  :wq<回车> 退出vi,保存文件
  :q<回车> 退出vi
常用 :q!<回车> 退出vi,不保存文件

移动光标

vi中不能使用鼠标移动光标,只能使用键盘,如下表所示:

常用 j / 回车 / 下箭头键
常用 k / 上箭头键
常用 h / 删除键 / 左箭头键
常用 l / 空格键 / 右箭头键
常用 0 (零) 将光标移动到当前行(有光标的行)的开头
常用 $ 将光标移到当前行的末尾
  w 将光标移到下一个单词的开头
  b 将光标移回前一个单词的开头
  :0<回车> / 1G 将光标移到文件的第一行
  :n<回车> / nG 将光标移到第n行
  :$<回车> / G 将光标移到文件的最后一行

屏幕处理

以下命令允许vi编辑器屏幕向上或向下移动几行并刷新。

  Ctrl + f 向前滚动一个屏幕
  Ctrl + b 向后滚动一个屏幕
  Ctrl + d 向下(向前)移动半个屏幕
  Ctrl + u 向上(向后)移动半个屏幕
  Ctrl + l 屏幕重绘
  Ctrl + r 重绘屏幕,擦除被删行

添加、更改和删除文本

vi撤销操作,只能撤销最后一步

常用 u 撤销最后一步操作

插入或添加文本

下面的命令可把vi编辑器切换到插入模式,按ESC键可以退出插入模式,回到命令模式。

常用 i 在光标前插入文本
  I 在当前行开始插入文本
常用 a 在光标后面追加文本
  A 将文本追加到当前行的末尾
常用 o 当前行后面新起一行,开始插入文本
常用 O 当前行前面新起一行,开始插入文本

修改文本

常用 r 替换光标下的单个字符,替换完后不会进入插入模式
  R 从当前光标位置开始替换字符,按ESC结束
  cw 从光标下的字符开始用新文本更改当前单词,按ESC结束
  cNw 在光标下改变N个以字符开头的单词,按ESC结束;例如,c5w改变了5个单词
  C 更改(替换)当前行中的字符,按ESC结束
  cc 更改(替换)整个当前行,按ESC结束
  Ncc / cNc 改变(替换)从当前行接下来下N行,按ESC结束

删除

常用 x 删除光标下的单个字符
  Nx 删除N个字符,从光标下的字符开始
  dw 删除以光标下字符开头的单个单词
  dNw 删除以光标下字符开头的N个单词;
例如,d5w删除了5个单词
  D 从当前光标位置开始删除行中剩余的部分
常用 dd 删除整个当前行
  Ndd / dNd 删除N行,从当前行开始;
例如,5dd删除5行

剪切和粘贴文本

  yy 将当前行复制到缓冲区中
  Nyy / yNy 将后面N行(包括当前行)复制到缓冲区中
  p 将缓冲区中的行粘贴到当前行之后的文本中

其他命令

搜索文本

搜索替换是一个常见操作,可以用以下命令搜索文本

  /string 向前搜索字符串
  ?string 向后搜索字符串
  n 搜索时,移动到下一个匹配
  N 搜索时,移动到反方向的下一个匹配

确定行号

有时需要确定当前行数或文件总行数。

  :.= 屏幕底部显示当前行的行号
  := 屏幕底部显示文件总行数
  Ctrl + g 屏幕底部显示当前行的行号与文件总行数

保存和读取文件

  :r filename<回车> 读取名为filename的文件,并在当前行之后插入
  :w<回车> 保存文件
  :w newfile<回车> 另存为名为newfile的新文件
  :12,35w smallfile<回车> 将编号为12到35行的内容另存为名为smallfile的新文件
  :w! prevfile<回车> 在预先存在的名为prevfile的文件上写入当前内容


浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载