习惯用vim来编辑代码,但总觉得自己一些编辑操作还是不够最优化,之前买了一本Pratical Vim,闲来无事的时候看看里面的一些vim技巧,读过之后,才发现自己其实vim还有很多地方没有掌握。
本文整理的一些技巧源自Pratical Vim一书以及自己平时实践所得。
普通模式
1.使用<C-a> <C-x>来对数字进行增加和减少
有时候代码中一些数字我们需要对其进行修改,如果使用cw或者R之类的命令的话其实就完全把数字当成一个普通的字符串来进行编辑,使用<C-a> <C-x>来对数字进行增减有一个比较重要的好处是可以将这样的偏移量修正用.命令来重复对其他数字进行操作。
2.使用bi以及ea在当前单词开头或者结尾添加字符串
其实这一点并不算是什么技巧,只是可能很多人脑中在需要处理在开头或者结尾添加字符串时,不会映射到两个按键既可以开始插入,而是会按下多个h或者l。
插入模式
1.使用 <C-h> <C-w> <C-u>来更正打错的文字
其中<C-h> <C-w> <C-u>分别表示删除前一个字符,删除前一个单词和删除整行,这样做的好处是,避免频繁按下退格键或者切换到普通模式操作。
2.使用<C-o>来进行一次普通模式操作,再回到插入模式
这个也挺实用的,书中举例在对一个文件进行编辑时,如果此时在屏幕下方,使用<C-o> + zz可以调整一下屏幕,并且仍然处于插入模式
3.使用<C-r>=来进行简单的数字运算
vim中有一个表达式寄存器,我们可以使用<C-r>=来访问它,这时界面下方会出现一个小的输入区,我们输入完一个算术式子后按下回车即可。
可视模式
1.对多行进行批量编辑
(1)在多行行首插入字符串
<C-v>进入块可视模式,用j或者k等命令选择需要编辑的行,按下^定位至行首,按下I进入插入模式,编辑完需要插入的字符串后,按下esc即可。
(2)在多行尾部插入字符串
<C-v>进入块可视模式,用j或者k等命令选择需要编辑的行,按下$定位至行尾,按下A进入插入模式,编辑完需要插入的字符串后,按下esc即可。
(3)在多行中部特定位置插入字符串
<C-v>进入块可视模式,用j或者k等命令选择需要编辑的行,按下A或者I进行插入模式,编辑完字符串后,按下esc即可。
(4)在多行中部特定位置删除字符串
<C-v>进入块可视模式,用j或者k等命令选择需要编辑的行,使用h或者l横向扩大块,按下d。
(5)在多行中部特定位置替换字符串
<C-v>进入块可视模式,用j或者k等命令选择需要编辑的行,使用h或者l横向扩大块,按下c进入插入模式,编辑完字符串,按下esc即可。
命令模式
1.常用地址符
1 文件第一行
$ 文件最后一行
0 文件第零行(虚拟)
. 光标所在行
'm 标记m所在的行
'< 选择区的第一行
'> 选择区的最后一行
% 整个文本(相当于 1,$)
2.常用命令及其缩写
copy=co=t
move=m
寄存器
vim中有许多寄存器,对寄存器的访问时通过"{reg_name}的形式来指定的,查看寄存器中内容用:reg {reg_name}
如果在操作命令中不指定寄存器,则默认使用无名寄存器,无名寄存器为",对无名寄存器显式访问可以用""来指定
一切x s d c y系列操作都将会覆盖无名寄存器的内容
0号寄存器为复制专用的寄存器,只有使用y命令的时候会同时对0号寄存器也进行赋值。因为在yy了一行之后,如果再删除了另一行,现在又想粘贴先前yy的一行,可以用"0p命令。
vim中1-9寄存器用于保存最近9次删除的内容
a-z为vim中的有名寄存器,将一行保存到c号寄存器用"cyy来指定。
_为vim中的黑洞寄存器,使用_寄存器来删除文本,将不会有保存,经常用于干净删除,即不想覆盖无名寄存器的时候。
+寄存器与系统的剪切板是等效的,所以如果要粘贴外部复制来的文本的话可以用"+p或者在插入模式中用<C-r>+