Vim常用命令小记(4)——插入和替换文本命令
特殊键
要插入以下特殊含义的字符到缓冲区里,在前面加上 CTRL-V。
要插入 <Nul> 字符,使用 "CTRL-V CTRL-@" 或者 "CTRL-V 000"。
<Esc> 或 CTRL-[ 结束插入或替换模式,回到普通模式。结束缩写。
CTRL-C 退出插入模式,回到普通模式。不检查缩写。不激活 "InsertLeave" 自动命令事件。
CTRL-@ 插入最近插入的文本,并停止插入
CTRL-A 插入最近插入的文本。
<BS> 或 CTRL-H 删除光标前的字符。
<Del> 删除光标下的字符。
如果光标在行尾,并且 'backspace' 选项包括 "eol",删除 <EOL>;下一行就此附加于当前行之后。
CTRL-W 删除光标前的单词。
CTRL-U 删除光标所有输入的字符。
<Tab> 或 CTRL-I 插入制表。如果打开 'expandtab' 选项,等价数目的空格被插入。
<NL> 或 CTRL-J 开始新行。
<CR> 或 CTRL-M 开始新行。
CTRL-K {char1} [char2] 输入二合字母 (见 |digraphs|)。
当 {char1} 为特殊字符时,该键的键码以 <> 形式插入。两个键都不考虑映射。
CTRL-N 查找下一个关键字。
CTRL-P 查找上一个关键字。
CTRL-R {0-9a-z"%#*+:.-=} 插入寄存器内容。在输入 CTRL-R 和第二个字符之间,'"' 会显示出来,以提示你需要输入寄存器的名字。
CTRL-R CTRL-R {0-9a-z"%#*+/:.-=} 插入寄存器内容。和单个 CTRL-R 类似,但是文本按本义插入,而不是像键盘输入那样。
CTRL-R CTRL-O {0-9a-z"%#*+/:.-=} 按本义插入寄存器内容,并且不进行自动缩进。和鼠标粘贴文本相同。不会替换字符!
'.' 寄存器 (最近插入的文本) 依然如同键盘输入那样的方式插入。
CTRL-R CTRL-P {0-9a-z"%#*+/:.-=} 按本义插入寄存器内容,修正缩进,和类似。不会替换字符!
'.' 寄存器 (最近插入的文本) 依然如同键盘输入那样的方式插入。
CTRL-T 在当前行开始处插入一个 shiftwidth 的缩进。缩进总是取整到 'shiftwidth' 的倍数。
CTRL-D 在当前行开始处删除一个 shiftwidth 的缩进。缩进总是取整到 'shiftwidth' 的倍数。
0 CTRL-D 删除当前行所有的缩进。
^ CTRL-D 删除当前行的所有缩进。缩进在下一行上恢复。这可以用于插入卷标。
CTRL-V 如果下一个是非数字,按本义插入,对特殊键而言,插入其终端代码。
否则,则输入字符的十、八或十六进制值。
CTRL-V 之后紧接着输入的字符不经过映射。
CTRL-Q 等同于 CTRL-V。
CTRL-X 进入 CTRL-X 模式,一个子模式。那里你可以给出命令来补全单词或者滚动窗口。
CTRL-E 插入光标下面的字符。
CTRL-Y 插入光标上面的字符。
CTRL-X CTRL-E 不退出插入模式,窗口滚动上移一行。
CTRL-X CTRL-Y 不退出插入模式,窗口滚动下移一行。
CTRL-] 切换缩写,不插入字符。
<Insert> 切换插入和替换模式。
插入模式下的控制键
<Up> 光标上移一行
<Down> 光标下移一行
CTRL-k 光标上移一行,到插入开始时所在的列
CTRL-G <Up> 光标上移一行,到插入开始时所在的列
CTRL-G k 光标上移一行,到插入开始时所在的列
CTRL-G CTRL-K 光标上移一行,到插入开始时所在的列
CTRL-j 光标下移一行,到插入开始时所在的列
CTRL-G <Down> 光标下移一行,到插入开始时所在的列
CTRL-G j 光标下移一行,到插入开始时所在的列
CTRL-G CTRL-J 光标下移一行,到插入开始时所在的列
<Left> 光标左移一个字符
<Right> 光标右移一个字符
<S-Left> 光标反向一个单词 (像 "b" 命令那样)
<C-Left> 光标反向一个单词 (像 "b" 命令那样)
<S-Right> 光标正向一个单词 (像 "w" 命令那样)
<C-Right> 光标正向一个单词 (像 "w" 命令那样)
<Home> 光标移到该行第一个字符
<End> 光标移到该行最后一个字符
<C-Home> 光标移到该文件第一个字符
<C-End> 光标移到该文件最后一个字符
<LeftMouse> 光标移动鼠标点击处
<S-Up> 上翻窗口一页
<PageUp> 上翻窗口一页
<S-Down> 下翻窗口一页
<PageDown> 下翻窗口一页
CTRL-O 执行命令,然后返回到插入模式
CTRL-\ CTRL-O 类似于 CTRL-O,但不移动光标
CTRL-L 置位 'insertmode' 时: 转到普通模式
CTRL-G u 打断撤销序列,开始新的改变
插入模式补全
CTRL-X CTRL-R 通过使用 '=' 寄存器来调用若干函数来决定下一个操作。
如果寄存器的内容/寄存器计算的结果是非法的 CTRL-X 模式键,则退出 CTRL-X 模式,键内容原样输出。
补全整行:
CTRL-X CTRL-L 反向搜索和当前行光标前字符序列完全相同的行。忽略缩进。
找到的行插入在光标的前面。
'complete' 选项用来决定匹配在哪个缓冲区里搜索,已载入和未载入的缓冲区都被使用。
可接着输入以下合法命令:
CTRL-L 或 CTRL-P 反向搜索前一个匹配行。替换上一次匹配的行。
CTRL-N 正向搜索下一个匹配行。替换上一次匹配的行。
CTRL-X CTRL-L 在扩展一行以后,得到紧接着匹配行之后的行,直到见到两个 CTRL-X 为止。
只能用于已载入的缓冲区。
补全当前文件内的关键字
CTRL-X CTRL-N 正向搜索以光标前面的关键字开始的单词。找到的关键字插入在光标的前面。
CTRL-X CTRL-P 反向搜索以光标前面的关键字开始的单词。找到的关键字插入在光标的前面。
可接着输入以下合法命令:
CTRL-N 正向搜索下一个匹配的关键字。替换上一次匹配的关键字。
CTRL-P 反向搜索前一个匹配的关键字。替换上一次匹配的关键字。
CTRL-X CTRL-N 或 CTRL-X CTRL-P 复制上次本类型补全在其它上下文里扩展的单词之后紧跟的单词,直到见到两个 CTRL-X 为止。
补全 'dictionary' 的关键字
CTRL-X CTRL-K 根据 'dictionary' 选项给出的文件搜索光标前关键字开始的单词。
找到的关键字插入在光标之前。可能很慢,因为在第一个匹配用到之前,所有的匹配都会被找到。
缺省 'dictionary' 选项为空。要得到哪里能找单词列表的建议,见 'dictionary' 选项。
可接着输入以下合法命令:
CTRL-K 或 CTRL-N 正向搜索下一个匹配的关键字。替换上一次匹配的关键字。
CTRL-P 反向搜索前一个匹配的关键字。替换上一次匹配的关键字。
CTRL-X CTRL-T 和 CTRL-X CTRL-K 类似,但稍有不同。它使用 'thesaurus' 选项,而不是 'dictionary'。
如果匹配在同义词字典里找到,同一行里其余单词也在匹配里列出,即使它们并不真的匹配。
这样一个单词可以被完全替换。
可接着输入以下合法命令:
CTRL-T 或 CTRL-N 正向搜索下一个匹配的关键字。替换上一次匹配的关键字。
CTRL-P 反向搜索前一个匹配的关键字。替换上一次匹配的关键字。
补全当前和头文件内的关键字
'include' 选项指定如何找到含有头文件名字的行。'path' 选项用来搜索头文件。
CTRL-X CTRL-I 搜索当前和头文件里第一个以光标前面的字母序列开始的关键字。
找到的关键字插入在光标的前面。
可接着输入以下合法命令:
CTRL-N 正向搜索下一个匹配的关键字。替换上一次匹配的关键字。
CTRL-I 和 <Tab> 相同,而这可能会在成功的补全之后输入,因此不使用 CTRL-I 来搜索下一个匹配。
CTRL-P 反向搜索前一个匹配的关键字。替换上一次匹配的关键字。
CTRL-X CTRL-I 复制上次本类型补全在其它上下文里扩展的单词之后紧跟的单词,直到见到两个 CTRL-X 为止。
补全标签
CTRL-X CTRL-] 搜索第一个以光标前面的字母序列开始的标签。
匹配的标签插在光标前面。
标签名可以包含字母字符和由 'iskeyword' 决定的字符 (和关键字相同)。
'showfulltag' 选项可以用来增加标签定义前后的上下文。
可接着输入以下合法命令:
CTRL-] 或 CTRL-N 正向搜索下一个匹配的标签。替换上一次匹配的标签。
CTRL-P 反向搜索前一个匹配的标签。替换上一次匹配的标签。
补全文件名
CTRL-X CTRL-F 搜索第一个以光标前面的字母序列开始的文件。
匹配的文件插在光标前面。
标签名可以包含字母字符和由 'isfname' 决定的字符 (和关键字相同)。
可接着输入以下合法命令:
CTRL-F 或 CTRL-N 正向搜索下一个匹配的文件名。替换上一次匹配的文件名。
CTRL-P 反向搜索前一个匹配的文件名。替换上一次匹配的文件名。
补全定义或宏
'define' 选项用来指定包含定义的行。'include' 选项用来指定包含头文件名的行。'path' 选项用来搜索头文件。
CTRL-X CTRL-D 搜索当前和头文件里第一个以光标前面的字母序列开始的定义 (或宏)。找到的定义名插入在光标的前面。
可接着输入以下合法命令:
CTRL-D 或 CTRL-N 正向搜索下一个匹配的定义。替换上一次匹配的定义。
CTRL-P 反向搜索前一个匹配的定义。替换上一次匹配的定义。
CTRL-X CTRL-D 复制上次本类型补全在其它上下文里扩展的单词之后紧跟的单词,直到见到两个 CTRL-X 为止。
补全 Vim 命令
CTRL-X CTRL-V 猜测光标前的项目的条目,并找到第一个匹配。
如果 CTRL-V 被映射,你通常可以用 CTRL-Q 来代替
可接着输入以下合法命令:
CTRL-V 或 CTRL-N 正向搜索下一个匹配。替换上一次匹配。
CTRL-P 反向搜索前一个匹配。替换上一次匹配。
CTRL-X CTRL-V 同 CTRL-V 一样。这允许映射键来执行 Vim 命令补全。
用户定义补全
命令补全可以由用户通过 'completefunc' 选项自定义一个函数来完成。
CTRL-X CTRL-U 猜测光标前面项目的类型,并寻找它的第一个匹配。
可接着输入以下合法命令:
CTRL-U 或 CTRL-N 正向搜索下一个匹配。替换上一次匹配。
CTRL-P 反向搜索前一个匹配。替换上一次匹配。
全能 (omni) 补全
命令补全可以由用户通过 'omnifunc' 选项自定义一个函数来完成。这通常用于特定文件类型的补全。
CTRL-X CTRL-O 猜测光标前面项目的类型,并寻找它的第一个匹配。
可接着输入以下合法命令:
CTRL-O 或 CTRL-N 正向搜索下一个匹配。替换上一次匹配。
CTRL-P 反向搜索前一个匹配。替换上一次匹配。
拼写建议
定位光标所在或之前的单词,然后提出正确拼写的单词作为建议进行替代。如果该行里有一个错误拼写的单词在光标之前或之下,移动光标到它后面。否则,使用刚刚在光标之前的那个单词来提出建议,即使该单词没有拼写错误。
CTRL-X CTRL-S 或 CTRL-X s 定位光标之前的单词,并寻找它的第一个拼写建议。
可接着输入以下合法命令:
CTRL-S 或 CTRL-N 正向搜索下一个建议。替换上一次的建议。
CTRL-P 反向搜索前一个建议。替换上一次的建议。
从不同的来源补全关键字
CTRL-N 在 'complete' 选项给出的地方搜索下一个以光标前面的关键字开始的单词。找到的关键字名插入在光标的前面。
CTRL-P 在 'complete' 选项给出的地方搜索上一个以光标前面的关键字开始的单词。找到的关键字名插入在光标的前面。
可接着输入以下合法命令:
CTRL-N 正向搜索下一个匹配的关键字。替换上一次匹配的关键字。
CTRL-P 反向搜索前一个匹配的关键字。替换上一次匹配的关键字。
CTRL-X CTRL-N 或 CTRL-X CTRL-P 复制上次本类型补全在其它上下文里扩展的单词之后紧跟的单词,直到见到两个 CTRL-X 为止。
插入模式命令
a 在光标后附加文本 [count] 次。如果光标在空行的第一列,启动插入模式。
在置位了 'virtualedit' 以后就不是!
A 在行尾附加文本 [count] 次。
<insert> 或 i 在光标前插入文本 [count] 次。在插入模式里使用 CTRL-O 的时候。
I 在本行第一个非空白字符之前插入文本 [count] 次。
如果 'cpoptions' 里有 'H' 标志位而本行只有空白,在最后一个空白前插入。
gI 在第一列插入文本 [count] 次。
gi 在当前缓冲区最近一次插入模式停止的位置继续插入文本。
该位置记在 '^ 位置标记里。如果标记在行末之后,和 "`^i" 有所差异。
该位置在插入/删除行时会自动修正。但不在插入/删除字符时被修正。
使用 :keepjumps 命令修饰符时,不改变 '^ 位置标记。
o 在光标下方开启新行,并插入文本,重复 [count] 次。
如果 'cpoptions' 里有 '#' 标志位,忽略计数。
O 在光标上方开启新行,并插入文本,重复 [count] 次。
如果 'cpoptions' 里有 '#' 标志位,忽略计数。
插入文件
:r[ead] [++opt] [name] 在光标下方插入文件 [name] (缺省: 当前文件)。
:{range}r[ead] [++opt] [name] 在指定行下方插入文件 [name] (缺省: 当前文件)。
:[range]r[ead] !{cmd} 执行 {cmd} 并把它的标准输出插入到光标下方。
临时文件会建立来保存命令输出的结果,并被读到缓冲区里。
'shellredir' 用来保存命令的输出结果,它可以设置是否包含标准错误的输出。
{cmd} 的执行和 ":!{cmd}" 类似,任何的 '!' 会被替换成以前的命令。
:0r {name} 在第一行之上插入文本。
相关概念
二合字母:
用来输入不能用普通键盘输入的字符。它们通常是可显示的非 ASCII 字符。二合字母比用 CTRL-V 输入十进制编码更方便记忆。
----------------------------------------
特殊寄存器:
'"' 无名寄存器,包含最近删除或抽出的文本
'%' 当前文件名
'#' 轮换文件名
'*' 剪贴板内容
'+' 剪贴板内容
'/' 最近的搜索模式
':' 最近的命令行
'.' 最近插入的文本
'-' 最近的行内 (少于一行) 删除
'=' 表达式寄存器;你会被提示输入一个表达式。注意 0x80 (十进制 128) 用于特殊键。
如果结果是 |List|,里面的项目被看作行,之间以换行符连接。
如果结果是浮点数,自动转化为字符串。
----------------------------------------
替换模式:
在普通模式里输入 "R" 命令进入替换模式。
在替换模式里,行内的单个字符在你输入字符的时候被删除。如果没有字符可以删了 (在行尾),输入的字符被附加 (和插入模式一样)。
如果输入了 <NL>,插入一个换行符,但不会删除任何字符。
如果输入一个正常的打印字符在 <Tab> 上面,字符数仍然一样,但是列数看起来少了。
如果在替换模式下删除字符 (用 <BS>、CTRL-W 或 CTRL-U),实际发生的事是删除了改变,被替换的字符复原。
如果输入超过已有的部分,则新增的字符被删除了。实际上,可看作是一次一个字符的撤销。
----------------------------------------
虚拟替换模式
在普通模式里输入 "gR" 命令进入虚拟替换模式。
虚拟替换模式和替换模式类似,但不是替换文件里的实际字符,而是替换屏幕的领地。这样,文件里的字符看起来不会移动。
输入 <NL> 当前行的后面部分被 <NL> 所替换 (即被删除),而替换继续在下一行进行。新行_不_会被插入,除非到达文件尾部之后。
输入 CTRL-T 和 CTRL-D 会看到有趣的效果。光标前面的字符向一边移动,跟平常一样,但是光标后面的字符保持不动。CTRL-T 会隐藏一些被移动字符遮盖的旧行,但是 CTRL-D 会重新让它们显现出来。
该模式对编辑 <Tab> 分隔表格列的时候很有用,因为输入新的数据的时候同时还能保持所有的列对齐。

浙公网安备 33010602011771号