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. jquery操作复选框(checkbox)的12个小技巧总结
  2. 凡夫怎么可能揣度圣者的境界
  3. python 写入网络视频文件很慢_用Python将数据写入LMDB非常慢
  4. Docker 学习资源整理
  5. c mysql转sqlite_SqliteToMysql
  6. 基于STM32,无人船岸基信息处理代码--python实现
  7. Halcon - 定位 - 卡尺
  8. HarmonyOS之IDL接口使用规范
  9. oracle insert select 大 批量 数据_芬兰 Vaisala维萨拉 HM70手持式温湿度表 型号:FL15/HM70+HMP75【北京中西华大吧】...
  10. mysql 整数类型_MySQL的数据类型
  11. 转换图片保持画质_图片格式怎么相互转换,如何转换jpg、 bmp、png格式
  12. 指定跳转_炸裂!PPT能一键统一色彩,还能一键跳转到指定颜色
  13. SAP License:ERP厂商比较
  14. 打算升级到 Monterey?我们为你准备了一份 macOS 安全升级指南
  15. js深入研究之神奇的匿名函数类生成方式
  16. 导入JasperReports坐标时无法下载com.lowagie:itext:jar:2.1.7.js6
  17. C#实现对即插U盘文件的自动拷贝
  18. clean crxmouse gestures 3.4.2 版本在 Chrome 98.0.4758.102(正式版本),ubuntu 20.04系统上使用时会导致鼠标右键失灵
  19. 微信手机浏览器多图片即时预览
  20. 如何做一个基于JAVA房产中介预约看房系统毕业设计毕设作品(springboot框架)

热门文章

  1. 计算机IP掩码的与运算,计算机IP地址与子网掩码如何进行AND运算
  2. android自定义广播实现app完全退出
  3. linux中byte数组长度,android – JNI:如何获得jbyteArray大小
  4. php curl 返回cookie_分享新浪图床上传接口PHP源码
  5. mysql5和8怎么同时安装_WINDOWS服务器同时安装多个版本的MYSQL的方法,MQYSQL5和MQYSQL8的共存。...
  6. 修改Linux文件的读写权限
  7. JS实现报表标题动态滚动效果
  8. 帆软计算字符串中指定字符个数
  9. 七牛云 rs.php 没有,设置了callbackUrl,七牛只是在客户端上打印了json格式的key和hash,居然没有按照设置跳转回来..怎么弄?...
  10. 泛函密度 matlab,【讨论】密度泛函理论中“密度”究竟指什么 - 计算模拟 - 小木虫 - 学术 科研 互动社区...