本文首发于VV姐的vim教程网 7种提升工做效率的Vim操做-Vim使用技巧(6),受权我原创发布。javascript
Vim一直被认为是一种很是高效的文本编辑器,可是对于普通用户来讲,很难在入门的时候就体会到Vim的所谓高效性。html
本文介绍7种提升你工做效率和生产力的Vim使用技巧,主要集中在对某个文件范围内的特定目标执行相同的重复性操做。抛砖引玉,做为你体验使用Vim进行高效操做的入门级教程。java
在vim重复操做命令. (英文句点)介绍过,.
命令能够用于重复上次修改。在《Vim实用技巧》一书中花了大量篇幅介绍" .
范式":一次按键移动,一次按键执行。vim
假设想在如下的JavaScript代码里的 + 先后加上空格以使代码更加美观,能够执行如下Vim操做:f+s␣+␣<Esc>;.;.;.
编辑器
var foo = "method("+argument1+","+argument2+")";
在上面的Vim操做中,首先使用字符查找命令 f
查找到第一个出现 + 的位置,而后使用 s
命令删除光标下的字符后再进入插入模式,在输入完 ␣+␣
后退出插入模式,完成了第一个 + 先后增长空格的操做。spa
使用Vim命令 ;
会在当前行重复查找上次 f
命令所查找的目标字符,而 .
命令则重复上次的修改。所以,能够连续输入 3 次 ;.
来完成所有修改操做。命令行
注:Vim命令 s
是 cl
的复合命令形式,表示删除一个字符并进入插入模式,更多内容可参考Vim删除并进入插入模式命令c。code
使用Vim .
命令重复执行一些比较简单的任务时很是高效,可是当须要执行的操做比较复杂时,Vim宏
是更理想的选择。orm
Vim宏很适合针对一系列类似的行、段落,甚至是文件,进行重复性的修改。用宏把任意数目的按键操做录制到寄存器,用于以后的回放,能够很是高效地实现重复操做。视频
假若有不少宏定义的常量
#define CONST_A 1 #define CONST_B 2 #define CONST_C 3 #define CONST_D 4 #define CONST_E 5 ...
如今想替换成const常量的形式
const int CONST_A = 1; const int CONST_B = 2; const int CONST_C = 3; const int CONST_D = 4; const int CONST_E = 5; ...
能够录制这样的一个宏:
qa
键开始录制宏,将宏存到 a 寄存器0
将光标移到行首,按 ce
删除 #define 并进入插入模式,输入 const int 并按ESC回到普通模式e
来到变量名的最后一个字母,按 a
进入插入模式,输入 = ,按ESC回到普通模式A
将光标移动到最后并进入插入模式,输入 ; 并按ESC回到普通模式j
将光标移到下一行,按 q
结束宏录制录完这个宏以后,就能够按 @a
回放录制的宏操做。每执行一次宏就会把当前行替换成const的形式并自动将光标移到下一行。
所以,只须要按9次 @a
或者一次性执行 9@a
就能够替换完全部要编辑的行。
Vim可视化模式下能够选择一块编辑区域,而后对选中的文件内容执行插入、删除、替换、改变大小写等操做。
可视化模式能高效地对一块目标区域执行相同的操做,是在Vim场景下执行重复操做的一种高效方法。
好比,若是想一次性注释多行文本,能够以下操做:
(1) 普通模式下按 Ctrl + v
进入块选择模式
(2) 向上或向下移动光标选择多行
(3) 移动光标到行的起始位置
(4) 而后按大写的I
进入行首插入模式
(5) 插入注释符
(6) 按Esc回到命令模式
须要注意的是:Vim同时编辑多行时,只有在当前的插入动做 结束后 (按 Esc
退为命令模式),以前选中的其它行才会显示执行后的结果。
Vim normal
命令能够在命令行模式执行普通模式下的命令,当normal命令与Vim可视化模式结合时,只需不多的操做就能完成大量重复性工做。
好比在编辑Markdown文件时想在某些行前面都加上 -
让普通文本行变成无序列表,能够先用 V
选中这些行,而后按 :'<,'>normal I-
并回车便可实现。
Vim命令行模式下使用 :substitute
命令 (缩写形式 s
) 能够将指定范围内的字符替换成其余目标字符,实现同时处理多个目标行的操做效果。
例如,假设但愿将Vim当前打开文件的全部行尾多余的空格删除,可使用Vim命令 :%s= *$==
。
其中,%
表示整个文件范围, *$
表示以0个或多个 *
结尾的文本行,更多关于 :substitute
命令的使用,能够参考Vim替换命令substitute小结。
Vim中不少东西都是经过寄存器来传递,好比复制剪切一段文本、访问系统的剪贴板,录制的宏等,都是将对应的操做结果保存在寄存器内。使用 :reg 寄存器名
命令能够查看对应寄存器中的内容。
关于Vim寄存器的更多内容能够参考Vim教程网上的内容:Vim寄存器介绍、Vim剪切、复制、粘贴和删除操做与Vim无名寄存器。
在插入模式下或者命令行模式下,使用 <C-r>+寄存器名
能够输入寄存器里的内容。例如,在插入模式下,能够经过输入 <C-r>"
来插入无名寄存器的内容,或输入 <C-r>0
来插入复制专用寄存器中的内容。
举个例子,想使用 :s
命令替换一个很长的单词而又不想手动输入它,能够先在普通模模式下使用命令 piw
或 piW
将其复制下来,默认会包存到无名寄存器 "
里,而后使用 <C-r>"
就能够将复制的单词输入到 :s
命令中。
关于Vim光标移动的内容,能够查看Vim光标移动命令汇总,在此先不作赘述。