目录

  • ​​简介​​
  • ​​普通模式(normal mode)​​
  • ​​插入模式(insert mode)​​
  • ​​命令行模式(command mode)​​
  • ​​vim Ex命令介绍​​
  • ​​Ex 命令操作范围​​
  • ​​命令模式下操作和普通模式操作文件对比​​
  • ​​可视化模式介绍(visual mode)​​
  • ​​三种可视化模式​​
  • ​​选择区域范围​​
  • ​​可视化模式操作范例​​
  • ​​vim字符选择​​
  • ​​同时注释多行​​
  • ​​删除多行注释​​
  • ​​参考​​

简介

与大部分常用的编辑器(notepad、word、kate等)不同,Vim是一种区分操作模式的编辑器。很多常用的编辑操作(如复制、粘贴、删除等)只有在特定的模式下才能进行,相同的按键在不同的Vim模式下所完成的操作是不一致的。

Vim这种区分模式的设计既是其操作高效、灵活的关键,也是其学习曲线十分陡峭的重要原因。

vim学习五之五种模式_命令行


普通模式(normal mode)

普通模式(normal mode,也被翻译为正常模式) 是打开 Vim 后进入的默认模式;不论当前处于哪种模式,按下 Esc 键 (有时需按两下) 都会进入普通模式。

  • Vim普通模式下提供了非常高效的命令用于光标移动, 位置跳转;
  • 此外,在Vim普通模式下还可以重新调整已有文件内容的位置(如复制 y、粘贴 p、删除 d),实现对文件的修改。

Vim普通模式的强大,很大程度上源于普通模式命令可以把操作符与动作命令结合在一起。


插入模式(insert mode)

Vim普通模式下按下 i、I、a、A、o、 O 等键会进入插入模式(insert mode)。

Vim插入模式只专注于做一件事,那就是输入文字,对文件内容进行编辑。除此之外,还可以使用键盘上的 ↑、↓、←、→ 按键移动光标。

替换模式(r、R命令触发)可以看作是插入模式的一种特例,它会从普通模式快速进入插入模式并替换文档中已有的字符,然后再返回到普通模式;


命令行模式(command mode)

Vim普通模式下按下 : 键会进入命令行模式(command mode)。

Vim命令行模式和 shell 下的命令行有些类似,可以输入一条命令后按回车键执行它
当然,在任意时刻都可以按 Esc 键从命令行模式切换回普通模式。

命令行模式会提示用户输入一条 Ex 命令、一个查找模式或一个表达式。出于历史原因,在命令行模式中执行的命令又被称做 Ex 命令
在我们按 / 调出查找提示符或用 = 访问表达式寄存器时,命令行模式也会被激活。

vim Ex命令介绍

出于历史原因,在 Vim 命令行模式中执行的命令又被称做 Ex 命令。Ex 命令都需要先输入 : 后按回车才能执行,按 / 调出查找提示符或用 = 访问表达式寄存器时,命令行模式也会被激活,但这两个并不是 Ex 命令。

可以用 Ex 命令:
读写文件 (:edit 和 :write)、
创建新标签页 (:tabnew)、
分割窗口 (:split)、
操作参数列表 (:prev 和 :next)
缓冲区列表 (:bprev 和 :bnext)。
事实上,Vim 为几乎所有功能都提供了相应的 Ex 命令;
通过命令 :h ex-cmd-index 可获得完整的Vim Ex命令列表。

Vim 普通模式命令一般只操作当前字符或当前行,而很多 Ex 命令可以用行号、位置标记或查找模式指定要操作的范围,这意味着无需移动光标就可以使用 Ex 命令在任意位置、对多个行同时执行某种操作。
因此,相比于普通模式下的 Vim 命令,Ex 命令作用范围更广,操作距离更远。

Ex 命令操作范围

Ex 命令的优点之一是可以在某一范围内的所有行上执行,可以通过以下几种方式指定操作范围。

指定特定行
输入一条只包含数字的 Ex 命令,Vim 会把这个数字解析成一个地址,并把光标移动到该数字所指定的行上。
例如,Vim命令 :3p 会把光标移到第 3 行,然后显示该行的内容。

用行号区间指定范围
可以用行号来指定一个范围 ({start},{end});
如 :2,5p 会打印从第 2 行到第 5 行之间的每一行的内容,且运行完这条命令后光标将停留在第 5 行。

先可视化模式下用高亮选区指定范围

使用Vim可视化模式选择待操作目标范围后按下 : 键,命令行上会预先填充一个范围 :’<,’>,用于代表高亮选区的范围,

例如,:’<,’>p 用于打印高亮选择的文档内容。

vim学习五之五种模式_vim_02


用模式匹配指定范围

Vim 接受以搜索模式作为一条 Ex 命令的地址;
即:
:/Pattern1/, /Pattern2/CMD/[options]
例如,/<html>/,/<\/html>/p 指定的操作范围是:
由 html 开标签所在的行开始,到对应闭标签 /html 所在的行结束。

用偏移对地址进行修正
地址偏移的一般形式为 :{address}+n,如果 n 被省略,缺省偏移量为 1。{address} 可以是一个行号、一个位置标记、或是一个查找模式。

假设只想对位于 之间的每一行都运行一条 Ex 命令,但不包括 及 标签所在的行,
那么可以为之加上偏移。
例如,:/<html>/+1,/<\/html>/-1p 可以实现该目的。

vim学习五之五种模式_html_03

命令模式下操作和普通模式操作文件对比

Vim命令行模式下也提供用于对文件内容进行删除、复制与粘贴操作的 Ex 命令。
例如,执行 :delete c 可以把当前行剪切到寄存器 c,再执行 :put c 命令可将其粘贴至当前光标所在行之下。

相比Vim普通模式下的 y、d、p 等命令来说,这些操作看似繁琐,但如果将它们与其他 Ex 命令结合起来使用,或者用于 Vim 脚本编程,将会更方便。


可视化模式介绍(visual mode)

Vi/Vim可视化模式(Visual Mode)下可以选择一块编辑区域,然后对选中的文件内容执行插入、删除、替换、改变大小写等操作,是Vim使用过程中使用非常频繁的一种模式。

Vim普通模式按下 v、V、 v 可以进入可视化模式 (visual node)。

三种可视化模式

  • 可视化字符
    选中光标经过的所有字符,普通模式下按 v 进入
  • 可视化行
    选中光标经过的所有行,普通模式下按 V 进入
  • 可视化块
    选中一整个矩形框表示的所有文本,普通模式下按 + v 进入

选择区域范围

如下图所示,进入Vim可视模式后,鼠标选中的文本区域由两个端点来标识(即左上角和右下角)。

vim学习五之五种模式_命令行_04


默认情况下,在Vim可视化模式下移动鼠标是控制右下角端点的位置;

当需要调整左上角端点的位置时,可以使用o键在左上角和右下角之间进行切换

可视化模式操作范例

vim字符选择

按键 v 进入Vim字符选择可视化模式,通过Vim鼠标移动命令 H 把鼠标往右移动,选择多个字符。

vim学习五之五种模式_vim_05


当然,选择好文本后,可以用 y 进行复制,用 p 命令粘贴等。

同时注释多行

使用Vim可视化模式可以很方便地操作多行文本内容,比如一次性注释多行文本,可以如下操作:

(1) Ctrl + v进入块选择模式

(2) 向上或向下移动光标选择多行

(3) 移动光标到行的起始位置

(4) 然后按大写的 I 进入行首插入模式

(5) 插入注释符

(6) 按Esc回到命令模式

vim学习五之五种模式_html_06

需要注意的是:Vim同时编辑多行时,只有在当前的插入动作结束后(按Esc退为命令模式),之前选中的其它行才会出现同样插入的文本。

删除多行注释

如果想一次性删除多行注释,则可以这样做:

(1) Ctrl + v 进入块选择模式

(2) 向上或向下移动光标,选择要删除的注释符号

(3) 按d键删除

vim学习五之五种模式_命令行_07


参考

五种模式:
https://vimjc.com/vim-mode.html

可视化模式:
https://vimjc.com/vim-visual-mode.html

命令模式下的Ex命令:
https://vimjc.com/vim-ex-command.html