摘要:本文首发于姐的教程网种提高工作效率的操作使用技巧,授权我原创发布。宏使用命令重复执行一些比较简单的任务时非常高效,但是当需要执行的操作比较复杂时,宏是更理想的选择。每执行一次宏就会把当前行替换成的形式并自动将光标移到下一行。
本文首发于VV姐的vim教程网 7种提高工作效率的Vim操作-Vim使用技巧(6),授权我原创发布。
Vim一直被认为是一种非常高效的文本编辑器,但是对于普通用户来说,很难在入门的时候就体会到Vim的所谓高效性。
本文介绍7种提高你工作效率和生产力的Vim使用技巧,主要集中在对某个文件范围内的特定目标执行相同的重复性操作。抛砖引玉,作为你体验使用Vim进行高效操作的入门级教程。
1. Vim重复操作命令.在vim重复操作命令. (英文句点)介绍过,. 命令可以用于重复上次修改。在《Vim实用技巧》一书中花了大量篇幅介绍" . 范式":一次按键移动,一次按键执行。
假设想在以下的JavaScript代码里的 + 前后加上空格以使代码更加美观,可以执行以下Vim操作:f+s␣+␣
var foo = "method("+argument1+","+argument2+")";
在上面的Vim操作中,首先使用字符查找命令 f 查找到第一个出现 + 的位置,然后使用 s 命令删除光标下的字符后再进入插入模式,在输入完 ␣+␣ 后退出插入模式,完成了第一个 + 前后增加空格的操作。
使用Vim命令 ; 会在当前行重复查找上次 f 命令所查找的目标字符,而 . 命令则重复上次的修改。因此,可以连续输入 3 次 ;. 来完成全部修改操作。
注:Vim命令 s 是 cl 的复合命令形式,表示删除一个字符并进入插入模式,更多内容可参考Vim删除并进入插入模式命令c。
2. Vim宏使用Vim . 命令重复执行一些比较简单的任务时非常高效,但是当需要执行的操作比较复杂时,Vim宏是更理想的选择。
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 就可以替换完所有要编辑的行。
3. Vim可视化模式Vim可视化模式下可以选择一块编辑区域,然后对选中的文件内容执行插入、删除、替换、改变大小写等操作。
可视化模式能高效地对一块目标区域执行相同的操作,是在Vim场景下执行重复操作的一种高效方法。
比如,如果想一次性注释多行文本,可以如下操作:
(1) 普通模式下按 Ctrl + v 进入块选择模式
(2) 向上或向下移动光标选择多行
(3) 移动光标到行的起始位置
(4) 然后按大写的I进入行首插入模式
(5) 插入注释符
(6) 按Esc回到命令模式
需要注意的是:Vim同时编辑多行时,只有在当前的插入动作 结束后 (按 Esc 退为命令模式),之前选中的其它行才会显示执行后的结果。
4. Vim normal命令Vim normal 命令可以在命令行模式执行普通模式下的命令,当normal命令与Vim可视化模式结合时,只需很少的操作就能完成大量重复性工作。
比如在编辑Markdown文件时想在某些行前面都加上 - 让普通文本行变成无序列表,可以先用 V 选中这些行,然后按 :"<,">normal I- 并回车即可实现。
5. Vim替换命令sVim命令行模式下使用 :substitute 命令 (缩写形式 s ) 可以将指定范围内的字符替换成其他目标字符,实现同时处理多个目标行的操作效果。
例如,假设希望将Vim当前打开文件的所有行尾多余的空格删除,可以使用Vim命令 :%s= *$==。
其中,% 表示整个文件范围, *$ 表示以0个或多个 * 结尾的文本行,更多关于 :substitute 命令的使用,可以参考Vim替换命令substitute小结。
6. Vim寄存器Vim中很多东西都是通过寄存器来传递,比如复制剪切一段文本、访问系统的剪贴板,录制的宏等,都是将对应的操作结果保存在寄存器内。使用 :reg 寄存器名 命令可以查看对应寄存器中的内容。
关于Vim寄存器的更多内容可以参考Vim教程网上的内容:Vim寄存器介绍、Vim剪切、复制、粘贴和删除操作与Vim无名寄存器。
在插入模式下或者命令行模式下,使用
举个例子,想使用 :s 命令替换一个很长的单词而又不想手动输入它,可以先在普通模模式下使用命令 piw 或 piW 将其复制下来,默认会包存到无名寄存器 " 里,然后使用
关于Vim光标移动的内容,可以查看Vim光标移动命令汇总,在此先不做赘述。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/25033.html
摘要:插件键位映射技巧性的配置等等都是锦上添花,它们有助于你进一步提高效率以及个性化你的工作环境,但是对于哲学的理解帮助甚少。为你开启语法高亮。你可以自定义各种语言的语法高亮,无非就是根据这些规 如果没有挑战,人生将多么无趣! 两种副本 在我的硬盘上总是保留着(至少)两份 Vim 的配置文件。其中一份是所谓完全正式版,它的文件名是 .vimrc,到本系列结束的时候,我们将了解其中...
摘要:相反,不显示行号设置为粘贴模式,解决粘贴时缩进错乱问题。会自动加入创建从当前行起至以下行的折叠标记,进行折叠。中的标记都有一个名字,这个名字用单一的字符表示。 学习vim并且其会成为你最后一个使用的文本编辑器 学习建议: 丢弃鼠标和小键盘 具有搭配使用各种按键的意识 首先来一张 mindmap : showImg(http://sean-images.qiniudn.com/V...
阅读 2273·2021-11-23 09:51
阅读 3727·2021-11-11 10:57
阅读 1373·2021-10-09 09:43
阅读 2421·2021-09-29 09:35
阅读 1997·2019-08-30 15:54
阅读 1771·2019-08-30 15:44
阅读 3159·2019-08-30 13:20
阅读 1671·2019-08-30 11:19