站内链接:

Introduction

help vim-modes

基本模式

  1. 普通模式(Normal Mode)

这是 Vim 默认的模式,也是进入 Vim 编辑器时所处的模式。在普通模式下,按键被视为命令或者快捷键,用于移动光标、复制、粘贴、删除、查找等操作。在普通模式下,不能直接输入文本,要进入插入模式才能编辑文本内容。

  • 使用 hjkl 分别向左、下、上、右移动光标。
  • 使用 dd 删除当前行。
  • 使用 yy 复制当前行。
  • 使用 p 在光标后粘贴复制的内容。
  • 使用 /keyword 进行搜索。
  1. 可视模式(Visual Mode)

在普通模式下按下 v 进入可视模式,也可以使用 V 进入行可视模式或者 Ctrl + v 进入块可视模式。可视模式用于选择文本块,可以方便地复制、删除、替换等。

  • 按下 v 进入可视模式,然后移动光标来选择一段文本,选择完成后,可以按下 y 复制选中的文本,按下 d 删除选中的文本。
  1. 选择模式(Select Mode)

选择模式是 Vim 在 Windows 等支持可视模式的终端下的一种模式。在选择模式下,可以使用鼠标进行文本选择,类似于其他文本编辑器的选择方式。

  1. 插入模式(Insert Mode)

在普通模式下按下 iao 等键进入插入模式。在插入模式下,按键会直接输入文本内容。这类似于其他文本编辑器的正常输入模式。

  • 按下 i 进入插入模式后,可以直接在当前光标位置开始输入文本。
  1. 命令行模式(Command-Line Mode)

在普通模式下按下 : 进入命令行模式。在命令行模式下,可以输入各种命令来保存文件、退出 Vim、执行替换等操作。

  • 输入 :w 保存文件。
  • 输入 :q 退出 Vim。
  • 输入 :s/old/new/g 进行替换。
  1. Ex 模式(Ex Mode)

Ex 模式是一种扩展的命令行模式,可以在文件中执行复杂的编辑命令。通常从命令行启动 Vim 后,输入 ex 或者 ex -s 就会进入 Ex 模式。

  • 输入 :%s/old/new/g 执行全局替换。
  • 输入 :g/pattern/d 删除所有匹配模式的行。

附加模式

操作符等待模式 该 (operator-pending) 模式与普通模式类似,但是在操作符

            之后,Vim 等待一个动作 {motion} 以确定操作符的作用范
            围。
替换模式		替换 (replace) 模式是插入模式的特殊情况。你可以做和插
          入模式里相同的事情,但是你输入的字符会覆盖原先的字符。
            见 |Replace-mode|。
            如果置位了 'showmode' 选项,窗口底部会出现
            "-- REPLACE --" 字样。
  虚拟替换模式		虚拟替换 (virtual replace) 模式类似于替换模式,但你替
          换的不是文件的字符,而是屏幕上占据的位置。见
            |Virtual-Replace-mode|。
            如果置位了 'showmode' 选项,窗口底部会出现
            "-- VREPLACE --" 字样。
  插入普通模式		在插入模式里输入 CTRL-O 可进入该 (insert normal) 模
          式。与普通模式类似,但是只能执行一条命令然后返回到插入
            模式。
            如果置位了 'showmode' 选项,窗口底部会出现
            "-- (insert) --" 字样。
  插入可视模式		在插入模式里进行可视模式的选择,例如,在插入模式里键入
          CTRL-O 然后键入 "v" 或 "V" 或 CTRL-V,可进入该 (insert
            visual) 模式。可视选择结束时,返回到插入模式。
            如果置位了 'showmode' 选项,窗口底部会出现
            "-- (insert) VISUAL --" 字样。
  插入选择模式		在插入模式里启动选择模式可进入该 (insert select) 模
          式。例如,用鼠标拖拽或 <S-Right>。如果选择模式结束,
            Vim 返回插入模式。
            如果置位了 'showmode' 选项,窗口底部会出现
            "-- (insert) SELECT --" 字样。

插入模式

大部分的 VIM 命令 都是在非插入模式下执行,插入模式一般用于文本输入。

插入-普通模式

该模式非常有用,但是经常忘记。 插入模式下的一个子模式。使用命令来进入该模式。

  • 进入插入-普通模式:C-O
  • 光标所在位置处于屏幕底部,想移动输入点到屏幕中间(非常常见): ESC + zz + o 或者 + zz +继续输入

Indentation

左缩进:Ctrl + D

右缩进:Ctrl + T

普通模式

Introduction

  • 出发点:工程师大部分的时间都是在思考、阅读、浏览,复制、移动,仅仅进行少量的写入操作
  • 一次操作:[前缀字符] + 操作符 + motion(动作命令)
  • 语法规则:任何一个操作符命令被连续调用两次时,它会作用于当前行,例如>>、dd、gUU(即 gUgU)等命令

操作符待决

(Operator-Pending), 一个仅仅接收动作命令的状态,在调用操作符的时候被激活,之后等待后续的动作命令。

进入待决模式:操作数 + 待决模式 + {动作命令}, 例如 d + OPM + {motion}, gu + OPM + {motion}

终止待决模式: d + OPM + ESC

替换模式

说明:类似于 office word 中的 Insert 模式,替换光标所在的字符

命令:r/R/s/S

缩进

1
2
3
4
5
6
左缩进:<
右缩进:>
自动缩进:=
左缩进当前行:<<
右缩进当前行:>>
缩进整个文件:gg>G

注意:如果没有使用后面的特殊语法,则缩进操作符后面必须紧跟动作命令,否则处于“操作符待决模式”下。

可视模式

Introduction

普通模式:operator + motion,先出发修改命令,在限定选区。

可视模式:motion + operator,先限定选区,之后执行命令(合理的三观啊)。

1
2
3
4
5
6
" 说明:对选中的文本进行操作,大部分的命令同普通模式一样,例如h/j/k/l、f{char}、;/,重复f{char}、n/N查找等
v " 字符可视模式
V " 行可视模式
<C_v> " 列块可视模式
gv " 重新选择上次的高亮选区(这个蛮有用的)
o " 切换选区的头尾(非常棒的命令)

选择模式

选择模式是另一种可视化模式,用于对选择的文本进行快速的删除和替换操作。

选中一段文本后,输入任何键会替换原有的所有选择字符,类似于 windows 下的选择模式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
" 1 命令
gh " 字符选择模式,删除选中的字符并进入插入模式,只能通过方向键、Ctrl来选择文本
gH " 行选择模式(替换整行)
g<C_H> " 块选择模式

" 2 模式转换
" 在选择模式下使用鼠标操作,设置如下选项
set selectmode=mouse

" 附加:该选择模式一般用于迎合想让vim编辑器像windows的其他文本编辑器的用户
" 选择模式到可视化模式
<C-O>
" 可视化模式到选择模式
<C-G>

命令行模式

Introduction

说明:按下 :进入命令行模式,在命令行模式中执行的命令称为 Ex 命令**

传承:ed 文本编辑—->ex 行编辑器—->vi(可视化)——->vim(vi improved)。

命令行窗口

  • 普通模式到 ex 窗口: q: (非常棒的命令,查找过去的记录)
  • 普通模式到 ex 历史记录: q/
  • 命令行模式到命令行窗口:

范围

1
2
3
4
n                       " 移动到光标的第n行
" {start},{end} " 选择指定方位,其中.表示当前行,$代表最后一行
% " 所有行
" /<div>/,/<\div>/ 表示<div> .... <\div>之间的文本

motion

1
2
3
4
5
6
t                       " 复制文本
co " 复制文本
m " 移动文本
@-ex " 重复执行Ex命令
<c-r><c-w> " 在命令行中插入光标下的单词
normal d " 执行普通模式命令

命令空间

功能:(自定义命名集)

说明:namespace 用于扩充可用命令的数目

结果:有点类似于对命令的命名归类,从而更加细化命令,扩充 vim 词汇量,对普通模式的扩充

查找模式

大小写敏感设置

1
2
3
4
set ignorecase          " 但是该命令的副作用非常大,例如影响自动补全行为
\C " 强制区分
\c " 强制不区分大小写
set smartcase " 自动识别大小写,模式串出现大写,则区分大小写(so good)

正则表达式

vim 默认的正则语法风格为 POSIX,如果想转为 perl/python 的正则表达式风格,可以使用 very magic 模式开关)

very-magic

假定除#、_、大小写字母、数字外的所有字符都具有特殊含义, 命令:

  • posix 风格:/#([0-9]{3})用于匹配#03233
  • vmagic 风格:/\v#([0-9]{3})

捕获子匹配

类此正则表达式,使用()进行子匹配的捕获操作,之后使用\1, \2, …, \9 来引用子匹配,\0 会引用整个匹配(并非子匹配)

原义查找文本

说明:目标文本可能存在某些正则语法的特殊符号,所以必须消除正则语法,使用 very nomagic 模式

匹配#a.b.*c 命令:/\V#a.b.*c