vi命令 是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能。

vi编辑器支持编辑模式和命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用vi编辑器就必须熟练掌握着两种模式的切换。默认情况下,打开vi编辑器后自动进入命令模式。从编辑模式切换到命令模式使用“esc”键,从命令模式切换到编辑模式使用“A”、“a”、“O”、“o”、“I”、“i”键。

vi 内置命令

vi编辑器提供了丰富的内置命令,有些内置命令使用键盘组合键即可完成,有些内置命令则需要以冒号 : 开头输入。常用内置命令如下:

插入

  • i 在当前字符前插入文本;
  • I 在当前行首插入文本;

  • a 在当前字符后添加文本;
  • A 在行末添加文本;

  • o 在当前行后面插入一空行;
  • O 在当前行前面插入一空行;

光标

  • :行号 光标跳转到指定行的行首
  • :<span></span>$ 光标跳转到最后一行的行首;

  • h / j / k / l 对应 / / /
  • n + h / j / k / ln + / / / 其中n是数字, 移到当前光标(左/下/上/右)n个字符

  • G 跳转到文档末尾
  • 1G 跳转到文档开始
  • 10G 跳转到文档第10行

  • [[ 跳到文档开始
  • ]] 跳到文档开始

  • b 前一单词(标点符号停顿)
  • B 前一单词(忽略标点符号)

  • {{ 跳到上一个空白行
  • }} 跳到下一个空白行

查找

  • /字符串 文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示;
  • ?字符串 文本查找操作,用于从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示;

  • N 查找上一处 (忽略符号)
  • n 查找下一处 (不忽略符号)

格式

<< / >> 缩进/反缩进一行

复制粘贴

  • Y 复制当前行
  • p 粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的下方;
  • P 粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的上方;

替换

:s(substitute)命令用来查找和替换字符串。语法如下:

  1. :{作用范围}s/{目标}/{替换}/{替换标志}

例如: 在全局范围(%)查找foo并替换为bar,所有出现都会被替换(g)

:%s/foo/bar/g

作用范围

作用范围分为当前行、全文、选区等等。

当前行:

:s/foo/bar/g

全文:

:%s/foo/bar/g

选区,在Visual模式下选择区域后输入:,Vim即可自动补全为 :’<,’>。

:'<,'>s/foo/bar/g

2-11行:

:5,12s/foo/bar/g

当前行.与接下来两行+2:

:.,+2s/foo/bar/g

删除

  • x / X 删除一个字符,x删除光标后的,而X删除光标前的;
  • D 删除从当前光标到光标所在行尾的全部字符;
  • dd 删除光标行正行内容;
  • ndd 其中n是数字, 删除当前行及其后n-1行;
  • d 删除当前字符, 需要在按下方向键后触发
  • nd 其中n是数字, 删除当前字符及其后n-1个字符(或行), 需要在按下方向键后触发

删除从n行到m行:

:n,md

从第n行删除到当前行:

:n,.d

退出与保存

  • :wq 退出并保存
  • :q! 退出不保存
  • :w 保存
  • :w! 强制存盘
  • :q 退出
  • ZZ 退出并保存
  • ZQ 退出并不保存

撤销与重做

  • u 撤销上一次操作
  • nu 其中n是数字, 撤销上n次操作
  • Ctrl + r 重做

其他

  • Esc 从编辑模式切换到命令模式;

  • Ctrl + U 向文件首翻半屏;
  • Ctrl + d 向文件尾翻半屏;
  • Ctrl + f 向文件尾翻一屏;
  • Ctrl + b 向文件首翻一屏;

  • nyy 将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字;

  • :e文件名 在命令模式下,打开并编辑指定名称的文件;
  • :n 在命令模式下,如果同时打开多个文件,则继续编辑下一个文件;
  • :f 在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例;

三种工作模式

vi编辑器有三种工作方式:命令方式、输入方式和 ex 转义方式。通过相应的命令或操作,在这三种工作方式之间可以进行转换。

命令方式

在Shell提示符后输入命令vi,进入vi编辑器,并处于vi的命令方式。此时,从键盘上输入的任何字符都被作为编辑命令来解释,例如,a(append)表示附加命令,i(insert)表示插入命令,x表示删除字符命令等。如果输入的字符不是vi的合法命令,则机器发出“报警声”,光标不移动。另外,在命令方式下输入的字符(即vi命令)并不在屏幕上显示出来,例如,输入i,屏幕上并无变化,但通过执行i命令,编辑器的工作方式却发生变化:由命令方式变为输入方式。

输入方式

通过输入vi的插入命令(i)、附加命令(a)、打开命令(o)、替换命令(s)、修改命令(c)或取代命令(r)可以从命令方式进入输入方式。在输入方式下,从键盘上输入的所有字符都被插入到正在编辑的缓冲区中,被当做该文件的正文。进入输入方式后,输入的可见字符都在屏幕上显示出来,而编辑命令不再起作用,仅作为普通字母出现。例如,在命令方式下输入字母i,进到输入方式,然后再输入i,就在屏幕上相应光标处添加一个字母i。

由输入方式回到命令方式的办法是按下Esc键。如果已在命令方式下,那么按下Esc键就会发出“嘟嘟”声。为了确保用户想执行的vi命令是在命令方式下输入的,不妨多按几下Esc键,听到嘟声后再输入命令。

ex转义方式

vi和ex编辑器的功能是相同的,二者的主要区别是用户界面。在vi中,命令通常是单个字母,如a,x,r等。而在ex中,命令是以Enter;键结束的命令行。vi有一个专门的“转义”命令,可访问很多面向行的ex命令。为使用ex转义方式,可输入一个冒号(:)。作为ex命令提示符,冒号出现在状态行(通常在屏幕最下一行)。按下中断键(通常是Del键),可终止正在执行的命令。多数文件管理命令都是在ex转义方式下执行的(例如,读取文件,把编辑缓冲区的内容写到文件中等)。转义命令执行后,自动回到命令方式。例如:

:1,$s/I/i/g 按Enter键

则从文件第一行至文件末尾($)将大写I全部替换成小写i。vi编辑器的三种工作方式之间的转换如图所示。
010.jpg

vim显示行号

第一种方式: 临时生效

在使用vim编辑文件的时候输入

:set nu

# or
:set number

第二种方式: 永久生效

$ vim ~/.vimrc
set nu

若需要取消行号:

set nonu

# or
set nonumber

vi 键位图

简体中文版(基础版)
20160907133419436.gif

英文版(基础版)
20160907133719002.gif

程序员定制版(on-screen 150DPI)
20160907135207839.png

程序员定制版(color hard-copy 300DPI)
20160907135321944.png

程序员定制版(monochrome hard-copy 300DPI)
20160907135434231.png

程序员定制版(color blind hard-copy)
20160907141347364.png

参考资料