原生Vim中的高效操作
Vim中有些按键能极大的提高幸福度,减少用脑,减少肌肉劳损,笔者用了一年Vim+vscode在这里小结下这段时间最常用的按键。(除了h,j,k,l
等最常用最基本的)
文章目录
一、用区间选择减少移动:i
(in) 和 a
(around)
区间选择,我最常用最喜欢的按键。需要和y,c,d
搭配使用。尤其是当光标处于单词中间,要想delete这个单词,你可能会用bdw
三个按键。先back到单词开始,再delete word,大脑要停顿一下,看光标位置再思考三个键。但有了in
和around
只要光标在单词范围内,按下diw
即可。(或daw
如果想删除空格)。
你可能不make sense,两方案都用了三个按键,只是少了用脑。但如果一段内容在<>,(),{}当中,就需要来到开始位置切换到visual模式控制光标选择括号中的内容… bla~bla,烦死了。但现在有了i)
,只要ci)
,di)
,yi)
就能直接修改,删除,复制整个()里的内容,对于a
也是相似的。
举一个模板的例子:
template <typename T, typename U>
如果没有i>
,需要移动到开始位置然后用t
去选择,浪费了脑力和肌肉。现在只要yi>
就能复制typename T, typename U
进一步,想连同复制<>,ya>
或ya<
就能复制整个<typename T, typename U>
前提是光标在<>之间。
再举一个代码块的例子:
{
if (loopInBlock >= MAX_LOOP_IN_BLOCK)
{
raise("It is max loop now");
}
}
可以用ya}
复制整个代码块,只要光标在代码块中,vim会自动匹配括号的层次。(注意为character-wise)
二、快捷键查找光标下关键字:#
和 *
笔者曾经总用/
输入很长的字符串查找,但自从知道了#
和*
就很少直接输入字符串了。#
意思是向上查找当前光标下的word
,*
则是向上查找。也可以配合n
重复上次查找和N
反向重复上次查找。
三、迅速找到类名:[{
和 ]}
试想有一个很长的类,好几百行,屏幕放不下。光标在类当中,想迅速跳转到类的名字看看父类是什么,那就要用{[
,意思是跳转到最近的匹配的{
。
四、指定位置插入:A
,I
,C
,S
这四个键太喜欢了,效率非常高,C
最常用。意思是:
A
转到行尾并插入,I
转到行首并插入,C
删除到行尾并插入,S
删除行并插入。
不知道这四个键,那只有:$a
,0i
,c$
,ddO
,多了脑力和手指移动。
五、覆盖粘贴当前单词 viwp
如果刚开始用vim不久,可能想怎么replace一个单词,可能要先daw
删除当前单词,然后看一下要粘贴的内容在哪个寄存器(daw改变了寄存器),然后p"1
粘贴。(好烦)
一旦进入visual模式,replace就方便很多。按v
进入visual,iw
选中单词,然后p
黏贴就好了。
六、多行插入相同内容:数字+o
写一个enum类,他们的前缀可能是一样的,可能要不停的黏贴黏贴…有了多行插入只需要数字+o
输入完毕后ESC
就能发现内容重复了多行。(实际上是重复了多次命令)
七、跳转到上次位置:ctrl-o
,ctrl-i
跳转到上次阅读代码的位置,非常常用。ctrl-o
跳转到上次位置,ctrl-i
返回
八、快速复制寄存器内容到命令行:ctrl-r + "
常用,尤其是配合/
查找%s
字符串替换,:find
查找文件。ctrl-r
之后通过"
选择寄存器,将寄存器的内容yank到命令行中。
九、命令行查找历史命令:ctrl-f
常用于查找debug print, 输入了多个命令,通过ctrl-f
会产生历史命令的quickfix。
笔者由于是vscode+vim的混合环境,所以一般只用vim编辑,不在project层次使用,因此这些按键在这种程度上就够用了。有更好的按键和使用情景欢迎分享~~