7种提高工作效率的Vim操作

Vim一直被认为是一种非常高效的文本编辑器,但是对于普通用户来说,很难在入门的时候就体会到Vim的所谓高效性。

本文介绍7种提高你工作效率和生产力的Vim使用技巧,主要集中在对某个文件范围内的特定目标执行相同的重复性操作。抛砖引玉,作为你体验使用Vim进行高效操作的入门级教程。

1. Vim重复操作命令.

vim重复操作命令. (英文句点)介绍过,.命令可以用于重复上次修改。在《Vim实用技巧》一书中花了大量篇幅介绍".范式":一次按键移动,一次按键执行。

假设想在以下的JavaScript代码里的 + 前后加上空格以使代码更加美观,可以执行以下Vim操作:f+s␣+␣<Esc>;.;.;.

var foo = "method("+argument1+","+argument2+")";

在上面的Vim操作中,首先使用字符查找命令f查找到第一个出现 + 的位置,然后使用s命令删除光标下的字符后再进入插入模式,在输入完␣+␣后退出插入模式,完成了第一个 + 前后增加空格的操作。

使用Vim命令;会在当前行重复查找上次f命令所查找的目标字符,而.命令则重复上次的修改。因此,可以连续输入 3 次;.来完成全部修改操作。

vim视频教程

: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的形式并自动将光标移到下一行。](/profile/1)

因此,只需要按9次@a或者一次性执行9@a就可以替换完所有要编辑的行。

vim视频教程

3. Vim可视化模式

Vim可视化模式下可以选择一块编辑区域,然后对选中的文件内容执行插入、删除、替换、改变大小写等操作。

可视化模式能高效地对一块目标区域执行相同的操作,是在Vim场景下执行重复操作的一种高效方法。

比如,如果想一次性注释多行文本,可以如下操作:

普通模式下按Ctrl + v进入块选择模式
向上或向下移动光标选择多行
(3) 移动光标到行的起始位置
(4) 然后按大写的I进入行首插入模式
(5) 插入注释符
(6) 按Esc回到命令模式

Vim可视化模式注释多行

需要注意的是:Vim同时编辑多行时,只有在当前的插入动作 结束后 (按Esc退为命令模式),之前选中的其它行才会显示执行后的结果。

4. Vim normal命令

Vim normal命令可以在命令行模式执行普通模式下的命令,当normal命令与Vim可视化模式结合时,只需很少的操作就能完成大量重复性工作。

比如在编辑Markdown文件时想在某些行前面都加上-让普通文本行变成无序列表,可以先用V选中这些行,然后按:'normal I-并回车即可实现。

vim视频教程

5. Vim替换命令s

Vim命令行模式下使用:substitute命令 (缩写形式s) 可以将指定范围内的字符替换成其他目标字符,实现同时处理多个目标行的操作效果。

例如,假设希望将Vim当前打开文件的所有行尾多余的空格删除,可以使用Vim命令:%s= *$==。

其中,%表示整个文件范围,$表示以0个或多个结尾的文本行,更多关于:substitute命令的使用,可以参考Vim替换命令substitute小结

vim视频教程

6. Vim寄存器

Vim中很多东西都是通过寄存器来传递,比如复制剪切一段文本、访问系统的剪贴板,录制的宏等,都是将对应的操作结果保存在寄存器内。使用:reg 寄存器名命令可以查看对应寄存器中的内容。

关于Vim寄存器的更多内容可以参考Vim教程网上的内容:Vim寄存器介绍Vim剪切、复制、粘贴和删除操作与Vim无名寄存器

在插入模式下或者命令行模式下,使用+寄存器名可以输入寄存器里的内容。例如,在插入模式下,可以通过输入"来插入无名寄存器的内容,或输入0来插入复制专用寄存器中的内容。

举个例子,想使用:s命令替换一个很长的单词而又不想手动输入它,可以先在普通模模式下使用命令piw或piW将其复制下来,默认会包存到无名寄存器"里,然后使用"就可以将复制的单词输入到:s命令中。

vim视频教程

7. Vim光标快速移动

关于Vim光标移动的内容,可以查看Vim光标移动命令汇总,在此先不做赘述。

全部评论

相关推荐

11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
Natrium_:这时间我以为飞机票
点赞 评论 收藏
分享
评论
点赞
18
分享
正在热议
# 25届秋招总结 #
443331次浏览 4520人参与
# 春招别灰心,我们一人来一句鼓励 #
42187次浏览 537人参与
# 阿里云管培生offer #
120420次浏览 2220人参与
# 地方国企笔面经互助 #
7973次浏览 18人参与
# 同bg的你秋招战况如何? #
77166次浏览 569人参与
# 实习必须要去大厂吗? #
55811次浏览 961人参与
# 北方华创开奖 #
107469次浏览 600人参与
# 虾皮求职进展汇总 #
116310次浏览 887人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11683次浏览 289人参与
# 实习,投递多份简历没人回复怎么办 #
2454962次浏览 34861人参与
# 提前批简历挂麻了怎么办 #
149927次浏览 1978人参与
# 在找工作求抱抱 #
906096次浏览 9421人参与
# 如果公司给你放一天假,你会怎么度过? #
4762次浏览 55人参与
# 你投递的公司有几家约面了? #
33209次浏览 188人参与
# 投递实习岗位前的准备 #
1196037次浏览 18550人参与
# 机械人春招想让哪家公司来捞你? #
157648次浏览 2267人参与
# 双非本科求职如何逆袭 #
662384次浏览 7397人参与
# 发工资后,你做的第一件事是什么 #
12806次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35906次浏览 384人参与
# 简历中的项目经历要怎么写? #
86937次浏览 1516人参与
# 参加完秋招的机械人,还参加春招吗? #
20153次浏览 240人参与
# 我的上岸简历长这样 #
452074次浏览 8089人参与
牛客网
牛客企业服务