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命令 scl 的复合命令形式,表示删除一个字符并进入插入模式,更多内容可参考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替换命令s

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

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

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

6. Vim寄存器

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

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

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

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

7. Vim光标快速移动

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

转载于:https://blog.51cto.com/14168089/2344487

7种提高工作效率的Vim操作相关推荐

  1. Centos5.5几种提高工作效率的方法

    Centos5.5几种提高工作效率的方法 1.通常在bash下输入不必把命令输入完全,bash就能判断出用户所要输入的命令,例如假设当前的目录包含以下文件和子目录 $ls zh888/  myblog ...

  2. 提高工作效率的方法_4种提高工作效率的方法

    提高工作效率的方法 时间贫困-一种想法,就是没有足够的时间来完成我们需要做的所有工作-是感知还是现实? 事实是,您一天最多不会超过24小时. 长时间工作无济于事. 实际上,您在一天中工作的时间越长,生 ...

  3. 职场人必看:提高工作效率的6大法则

    提高工作效率的6大法则 01.先做最麻烦的事 02.建立未做事项清单 03.利用好碎片时间 04.给每一个工作任务限定时间 05.提前准备下一步 06.总结和思考 参考 进入职场, 你是否曾通宵达旦的 ...

  4. 码农提高工作效率的几种方式

    俗话说,天下武功,唯快不破.也就是说要练成天下高手的话,出招速度一定要快,这样才能在江湖上立足,不至于掉了脑袋.而程序员要在IT界混出个名堂,也要有高效的工作效率才行.IT行业时时刻刻都产生着新知识. ...

  5. oracle对某两列求和再求和_只会SUM函数求和,试试这5种求和函数,十倍提高工作效率...

    在平时的工作和学习中,求和计算算是比较司空见惯的数据统计方式,但大多数人只知道Sum函数可以用来求和,事实上,除了SUM函数,还有SUMIF.SUMIFS.SUBTOTAL.SUMPRODUCT.SU ...

  6. 推荐8个可以显著提高工作效率的办公神器

    分享8个可以显著提高工作效率的办公神器. 1.多译 多译是一款非常好用且高效的桌面端翻译工具,目前支持MacOS与Windows系统.使用多译,从文段翻译.截图翻译到字典查词,从自动识别.合并换行到自 ...

  7. 码农提高工作效率(转载)

    本文转自:http://www.cnblogs.com/huang0925/p/3612741.html 俗话说,天下武功,唯快不破.也就是说要练成天下高手的话,出招速度一定要快,这样才能在江湖上立足 ...

  8. Windows 下有什么软件能够极大地提高工作效率

    Windows 下有什么软件能够极大地提高工作效率?修改 可以推荐一些好的应用或者有趣的程序,能提升工作效率或者能让人眼前一亮的.修改 举报1 条评论 分享 • 邀请回答 按票数排序按时间排序 26 ...

  9. 如何用 MacBook 提高工作效率 【配置篇】

    上一篇文章从应用(application)的选择上推荐了一些我常用的应用或工具,这篇主要从配置(config)和思路.原则上提高工作效率.总而言之,我们的目的只有一个,帮助尽快完成工作,能不加班就不加 ...

  10. 使用Linux命令行技术提高工作效率

    这篇文章是当时参加网络系统空间竞赛时老师给的总结性的文章让我们好好看,当时不以为然,觉得没啥好看的,都是些基础的命令. 但是过了两年时间,期间也用了好长时间的Linux系统,在回头看这篇文章时还是能够 ...

最新文章

  1. WinAPI: 输入光标相关的函数[3]
  2. Google 在印度建立 AI 实验室,致力于农业、医疗、教育
  3. zabbix添加自定义监控项目-配置邮件告警-测试告警
  4. Xamarin Andro教程搭建Xamarin Androidid开发环境(一)
  5. Python变量本质
  6. Visual 数据绑定
  7. execl执行linux命令,execl执行Linux命令
  8. ARM:下一代架构也将继续供给华为
  9. 是、大于等于_血压高,是不是等于患上高血压?吃药之前,先搞清楚
  10. P版openstack-nova-compute中日志报错无法同步resource_provider
  11. Eclipse自动生成返回值对象的快捷键是什么?
  12. 【JSP开发】response重定向和resquest转发
  13. 全国多省市实现电子营业执照和电子印章同步发放
  14. android刷步工具,公益步数刷步助手
  15. iis无法启动万维网发布服务W3SVC
  16. 计算机内存运算太低,内存频率低对电脑性能有影响吗
  17. 萌新易懂ubuntu16.04安装搜狗拼音
  18. tcp连接失败触发的异常
  19. Ubuntu 18.04 LTS版本 谷歌拼音输入法安装
  20. 北京地铁背景音乐曲目

热门文章

  1. 深入理解java虚拟机学习笔记(一)
  2. openEuler 高校开发者大赛报名启动!广阔天地,码出不凡
  3. Android的JNI【实战教程】4⃣️--C调用Java代码
  4. 子类发送消息_RocketMQ生产消息源码解析
  5. open函数_全!Python函数和文件操作合集(长文系列第三篇)
  6. python下文件以及文件的常用操作-1
  7. Django结合Bootstrap分页显示mysql中的值
  8. 异步保存数据到mysql或mssql 学习笔记
  9. 帆软数据集函数ds1.select()和ds1.group()函数的使用
  10. python 组合求和_39. 组合总和(Python)