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> 分隔表格列的时候很有用,因为输入新的数据的时候同时还能保持所有的列对齐。

posted @ 2012-07-03 07:29  小兔有点乖  阅读(847)  评论(0)    收藏  举报