vi 命令是一种文本编辑器,常用于 Linux 和 Unix 操作系统中。它的设计初衷是为了在命令行界面下对文件进行编辑,因此具有简单、高效和灵活的特点。虽然现代计算机使用图形界面的文本编辑器已很普遍,但 vi 仍然被广泛使用,尤其是在服务器运维和开发领域。在本文中,我将全面详细讲解 vi 命令及其全部快捷键。

一、vi 的基本概念

vi 的三种模式

vi 命令有三种模式,分别是命令模式(Command mode)、插入模式(Insert mode)和行末模式(Last line mode)。这三种模式的切换方式如下:

在命令模式下,按下 i 键或 Insert 键,进入插入模式。在插入模式下,按下 ESC 键,回到命令模式。在命令模式下,按下 : 键,进入行末模式。vi 的基本操作

在命令模式下,我们可以使用以下基本操作:

光标移动:h(左)、j(下)、k(上)、l(右)。进入插入模式:i,在光标前插入;a,在光标后插入。删除操作:x,删除光标所在的字符;dd,删除整行。撤销操作:u,撤销最后的操作。保存操作::w,保存文件;:q,退出 vi;:q!,强制退出 vi。

1. 命令模式下的快捷键

  • 光标移动:

    • h 或 :向左移动一个字符。
    • j 或 :向下移动一行。
    • k 或 :向上移动一行。
    • l 或 :向右移动一个字符。
    • 0:移到行首。
    • $:移到行末。
    • ^:移到本行第一个非空字符处。
    • G:移到文件末尾或第 n 行(n 为数字)。
    • nG:移到第 n 行(n 为数字)。
  • 插入操作:

    • i:在光标前插入。
    • I:在行首插入。
    • a:在光标后插入。
    • A:在行末插入。
    • o:在光标下新开一行并插入。
    • O:在光标上新开一行并插入。
  • 删除和复制操作:

    • x:删除光标所在的字符。
    • dd:删除整行。
    • yy:复制整行。
    • p:在光标下粘贴。
  • 撤销操作:

    • u:撤销最后的操作。
    • Ctrl + r:恢复最后的操作。
  • 查找和替换:

    • /pattern:向前查找 pattern。
    • ?pattern:向后查找 pattern。
    • n:继续查找下一个。
    • N:继续查找上一个。
    • /old/new:将光标所在行中第一个 old 替换为 new。
    • /old/new/g:将光标所在行中所有 old 替换为 new。
    • :%s/old/new/g:将整个文件中所有 old 替换为 new。
  • 其他操作:

    • :w:保存文件。
    • :q:退出 vi。
    • :wq 或 :x 或 ZZ:保存文件并退出 vi。
    • !command:执行外部命令 command。
    • :set number:显示行号。
    • Ctrl + g:显示当前位置及文件状态。
    • :set tabstop=n:设置 tab 键宽度为 n 个空格。
    • :set expandtab:将 tab 转换为空格。
    • :set noexpandtab:取消将 tab 转换为空格。
    • J:将光标所在行与下一行合并。
    • :n1,n2 w file:将 n1 到 n2 行的内容保存到 file 文件中。
    • :n1,n2 w >>file:将 n1 到 n2 行的内容追加到 file 文件中。
    • :n1,n2 d:删除 n1 到 n2 行的内容。
    • :n1,n2 co n3:将 n1 到 n2 行的内容复制到 n3 行下面。
    • :n1,n2 m n3:将 n1 到 n2 行的内容移动到 n3 行下面。

2. 插入模式下的快捷键

  • ESC:回到命令模式。
  • Ctrl + g:显示当前光标位置。
  • Ctrl + h 或 Backspace:删除光标前面的一个字符。
  • Ctrl + d:删除光标后面的一个字符。
  • Ctrl + t:插入制表符(Tab)。
  • Ctrl + v:插入控制字符(例如 Ctrl + v,Ctrl + n 将插入一个换行符)。
  • Ctrl + y:插入来自光标上方的文本。
  • Ctrl + e:插入来自光标下方的文本。
  • Ctrl + a:移到行首。
  • Ctrl + e:移到行末。
  • Ctrl + f:向后翻页。
  • Ctrl + b:向前翻页。

3. 行末模式下的快捷键

  • /pattern:向前查找 pattern。
  • ?pattern:向后查找 pattern。
  • n:继续查找下一个。
  • N:继续查找上一个。
  • :w:保存文件。
  • :q:退出 vi。
  • :wq 或 :x 或 ZZ:保存文件并退出 vi。
  • :e filename:打开另一个文件。
  • :e! filename:强制打开另一个文件。
  • :n:编辑下一个文件。
  • :!command:执行外部命令 command。
  • :set number:显示行号。
  • :set nonumber:不显示行号。
  • :%s/old/new/g:将整个文件中所有 old 替换为 new。
  • :25:跳转到第 25 行。
  • : $:跳转到最后一行。