Vim实用技巧
最近利用碎片时间重新看了一遍《Vim实用技巧》一书,记录超实用的技能点,提升编辑效率。
最佳实践
总结了一下常用的模式,非常的实用。
- 一下移动,一下命令
- 控制编辑粒度
- 命令模式结合正常模式
重复上次编辑
.重复最近一次操作。比如当前行末插入分号,A;<ESC>,然后j.即可在下一行末添加分号。
缩进
>可以缩进当前行,也可作用于区域.比如>G缩进到文件尾部;shift+v选中多行,则>缩进这些行;当然<执行相反操作。
以退为进
如想在本行多个+两遍加空格,则f+s + 即可。先删除+然后在输入 + 核心是构造可重复的编辑粒度。因为这样对写一个同样编辑;.即可。
常见操作符
c改变d删除>或<或=缩进gu或gU或g~大小写转换
可视模式
高亮选中特定区域,操作非常直观,但不易于重复操作。
v面向字符V面向行Ctrl + v面向列块gv选中上次可视区域o切换可视区域激活端
命令模式之行选取
:出发命令模式,首先面临的是对哪些行操作。
.代表当前行1代表第一行$代表最后一行0代表第一行之上的虚拟行%代表所有行'<,'>代表可视模式高亮的行3,5代表3-5行,范围选取.,.+3代表当前行及其下3行。支持offset
命令模式之复制移动
Vim可以方便地对某些行做复制移动操作,在命令模式下编辑跨度可以很大。
:copy或:t复制到某处:move或:m移动到某处
主要两种语义,一种是复制移动到某处,一种是从某处复制、移动过来。
:.m3把当前行移动到第3行之后:'<,'>t$把高亮区域复制到文件末尾:3,5t.把3-5行复制到当前行之后
命令模式之normal
命令模式影响范围深远,普通模式编辑功能丰富,二者珠联璧合。
:'<,'>normal A;在高亮区域末尾都加分号:'<,'>normal i//注释高亮区域
挂起Vim
Ctrl + z挂起程序,jobs命令可以查看job,然后fg可以返回Vim。
当前行置于屏幕中间
zz可以将光标行置于屏幕中间,尤其是光标位于屏幕下方时,这样可以省略很多个j按键。
快速移动光标
基于特定特定按键:
hjkl基础的左下上右移动,其中hl主要用在off-one的场景,避免连续按gj或gk针对屏幕行移动0移动到行首$移动到行位^移动到屏幕行首w移动到下一个单词开头e移动到单词末尾,ea在单词末尾插入很常见b移动到上一个单词开头ge移动到上一个单词末尾W或gW面向字串的操作E或gE面向字串的操作%移动到对称的括号上
基于查找:
f{char}移动到字符F{char}反向移动到字符t{char}移动到字符前一个字符T{char}反向移动到字符前一个字符;重复查找,回退/search-word可以跨越多行,结合可视模式和命令待决模式
选择文本对象
基于各种括号:
i{花括号内部i[方括号内部i(圆括号内部i<尖括号内部a{包括花括号a[包括方括号a(包括圆括号a<包括尖括号- 可以结合可视模式和命令待决模式
其他文本对象
/iw/aw/iW/aW/is/as/ip/ap等%快速跳转