参考书籍:《Vim实用技巧》

1、普通模式下

.命令可以重复上次的修改,其中上次的修改可以指很多:一次修改的单位可以是字符、整行,甚至是整个文件。

另外,每次进如插入模式中也会完成一次修改:从进入插入模式那一刻起(例如,输入i),直到返回普通模式时为止(输入<Esc>),vim会记录每一个操作。可以用.来重复上面的操作。

x命令删除光标下的字符

dd命令删除光标所在行

u命令可以撤销修改。

>G会增加从当前行到文档末尾处的缩进层级。<G则与之相反。

2、普通模式下

$命令下将光标移到行尾

a命令指在当前光标所在处插入

o命令指在当前光标所在行的下一行插入。

O命令指在当前光标所在行的上一行插入。

A命令是在当前行的结尾添加内容

3、普通模式下

s命令先删除当前光标下的字符,然后进入插入模式。

f{char}/t{char}命令在行内查找下一指定字符。;命令会重复查找上一次f/t命令所查找字符。,命令回退。

F{char/T{char}命令在行内查找上一指定字符。;命令重复。,命令回退。

/pattern<ENTER>在文档中查找下一处匹配项。n命令重复。N命令回退。

?pattern<ENTER>在文档中查找上一处匹配项。n命令重复。N命令回退。

:s/target/replacement执行替换。&重复。u回退。

qx{changes}q执行一系列的修改。@x重复。u回退。

4、普通模式下

*命令可以查找当前光标下的单词。执行该命令后,光标会跳到下一个匹配项上,且所有出现这个词的地方都会被高亮显示出来。

cw命令会删除从光标位置到单词结尾间的字符,并进入插入模式。

 5、普通模式下,很多命令可以在执行时指定执行的次数,这样就可以被执行多次。

u键可以触发撤销命令,我们可以合理利用Esc键以控制撤销的粒度。如进入编辑模式后可以输入单词后使用ESc,或者一个句子后使用Esc,或者一个段落。这种情况下,当我们回到普通模式时使用u键时,回退的就是一个单词/句子/段落。

db命令删除从光标起始位置到单词开头的内容(从右往左)。

b键把光标移到单词的开头。

dw删除光标当前所在单词。d2w删两个,d3w删3个,以此类推。

daw删除一个单词。aw是文本对象。

Ctrl+a和Ctrl+x命令分别对数字执行加或减操作。在不带次数执行时,他们会逐个加减,但如果带一个次数前缀,那么就可以用它们加减任意整数。例如,如果当前光标在字符5上,执行10ctrl+a就会把它变成15。如果光标不在数字上,ctrl+a命令将在当前行前向查找一个数字,如果找到了,他就径直跳到那里。

yyp命令复制光标所在行并在当前行的下一行输出。

 6、操作符+命令=操作!

d{motion}命令可以对一个字符(dl)、一个完整单词(daw)或一整个段落(dap)进行操作,它的作用范围由动作命令决定。c{motion}、y{motion}以及其他一些命令类似,统称操作符。

常见的操作符有:

c 修改

d 删除

y 复制到寄存器

g~ 反转大小写

gu 转换为小写

gU 转换为大写

> 增加缩进

< 减小缩进

= 自动缩进

! 使用外部程序过滤{motion}所跨越的行。

g~、gu和gU命令要用两次按键来调用,可以把上述命令中的g当作一个前缀字符,用以改变其后面的按键行为。

操作符和动作命令的结合形成了一种语法。如上面的dl、daw、dap,其中d是操作符,l、aw、ap是动作命令。根据上面所列举的一些常见的操作符,则可以组合gUaw、gUap等。

动作命令和操作符都可以自定义。

7、插入模式

在插入模式下,除了使用退格键进行删除光标前的字符。还可以用以下按键操作进行删除。

ctrl+h删除前一个字符(同退格键)。

ctrl+w删除前一个单词

ctrl+u删除到行首

退回普通模式:Esc命令、ctrl+[、ctrl+o切换到插入-普通模式

插入-普通模式是普通模式的一个特例,它能让我们执行一次普通模式命令之后再返回到插入模式。

zz命令可以重绘屏幕,并把当前行显示在窗口正中,这样就能阅读当前行之上及之下的半屏内容。

K命令用于查看处于光标之下的那个单词的手册页。

J命令可以把当前行和下一行连接到一起。

ctrl+r{register},将寄存器里面地内容插入到光标所在位置。

8、插入模式下

表达式寄存器,=符号指明使用表达式寄存器。在插入模式中,使用ctrl+r=就可以访问这一寄存器。这条命令会在屏幕下面显示一个提示符,我们可以在其后面输入要执行地表达式。输入表达式后敲一下<Enter>,vim就会把执行地结果插入到文档的当前位置。

 9、插入模式下

Vim可以用字符编码插入任意字符。常用命令如下:

ctrl+v {code} 以十进制字符编码插入字符。如code可指ascll码,如输入"A",啧输入ctrl+v 065。

ctrl+v u{code} 以十六进制字符编码插入字符。如unicode编码,最大会有65535个字符。

ctrl+v {nondigit} 按原义插入非数字字符。

ga命令可以显示当前光标下任意字符的编码,会以十进制和十六进制的形式显示在屏幕下方。当然如果文档中不存在的字符则无能为力。

ctrl+k {char1}{char2} 插入二和字母{char1}{char2}表示的字符。使用二合字母(digraph)插入非常用字符相对数字编码要容易记一些。

:h idgraph-table可查看二合字母列表。

 10、R/TNSERT键可以由普通模式进入替换模式。

gR命令进入虚拟替换模式,会把制表符当作一组空格处理,而不是整体当作一个字符。

在虚拟替换模式中,是以屏幕上实际显示的宽度来替换字符的,而不是按照文件中所保存的字符进行替换。因此建议多用虚拟替换模式。

单次替换模式/虚拟替换模式:r{char}和gr{char}。