Vim实用技巧

Published: 11 Aug 2018 Category: tool

最近利用碎片时间重新看了一遍《Vim实用技巧》一书,记录超实用的技能点,提升编辑效率。

最佳实践

总结了一下常用的模式,非常的实用。

  • 一下移动,一下命令
  • 控制编辑粒度
  • 命令模式结合正常模式

重复上次编辑

.重复最近一次操作。比如当前行末插入分号,A;<ESC>,然后j.即可在下一行末添加分号。

缩进

>可以缩进当前行,也可作用于区域.比如>G缩进到文件尾部;shift+v选中多行,则>缩进这些行;当然<执行相反操作。

以退为进

如想在本行多个+两遍加空格,则f+s + 即可。先删除+然后在输入 + 核心是构造可重复的编辑粒度。因为这样对写一个同样编辑;.即可。

常见操作符

  • c改变
  • d删除
  • ><=缩进
  • gugUg~大小写转换

可视模式

高亮选中特定区域,操作非常直观,但不易于重复操作。

  • 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的场景,避免连续按
  • gjgk针对屏幕行移动
  • 0移动到行首
  • $移动到行位
  • ^移动到屏幕行首
  • w移动到下一个单词开头
  • e移动到单词末尾,ea在单词末尾插入很常见
  • b移动到上一个单词开头
  • ge移动到上一个单词末尾
  • WgW面向字串的操作
  • EgE面向字串的操作
  • %移动到对称的括号上

基于查找:

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