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
等%
快速跳转