Vim 实用技巧必知必会
吴咏炜
前 Intel 资深软件架构师
新⼈⾸单¥19.9
2290 人已学习
课程目录
已更新 15 讲 / 共 24 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (2讲)
开篇词|我们为什么要学 Vim?
免费
导读|池建强:Vim 就是四个字“唯快不破”
基础篇 (10讲)
01|各平台下的 Vim 安装方法:上路前准备好你的宝马
02|基本概念和基础命令:应对简单的编辑任务
03|更多常用命令:应对稍复杂的编辑任务
04|初步定制:让你的 Vim 更顺手
05|多文件打开与缓冲区:复制粘贴的正确姿势
06|窗口和标签页:修改、对比多个文件的正确姿势
07|正则表达式:实现文件内容的搜索和替换
08|基本编程支持:规避、解决编程时的常见问题
09|七大常用技巧:让编辑效率再上一个台阶
10|代码重构实验:在实战中提高编辑熟练度
提高篇 (2讲)
11|文本的细节:关于字符、编码、行你所需要知道的一切
12|语法加亮和配色方案:颜即正义
拓展篇 (1讲)
拓展1|纯文本编辑:使用 Vim 书写中英文文档
Vim 实用技巧必知必会
15
15
1.0x
00:00/00:00
登录|注册

09|七大常用技巧:让编辑效率再上一个台阶

吴咏炜 2020-08-12
你好,我是吴咏炜。
学到这里,你应该已经初步掌握 Vim 了。我们这一讲来重点看一下 Vim 里的七大常用编辑技巧。有些技巧你直接就可以用,有些则需要安装第三方插件。但无论是哪种情况,它们都可以大大提高你的编辑效率。
从这一讲开始,我们将不再讨论插件的安装过程,而只是给出像 skywind3000/asyncrun.vim 这样的名称。相信你学到现在应该已经不需要我再详细讲述这样的基础知识了。如果你对安装插件还不太熟练的话,请复习第 4 讲。接下来,我们正式开始今天的内容。

自动完成

自动完成是一个编辑器中很主流的功能了。通常,我们希望编辑器能在我们输入一部分内容时就能猜到我们希望输入的是什么,并能够予以提示。自动完成可以节约我们输入的工作量,是一件编辑中非常必要的利器。
Vim 内置有自动完成功能。最基本的自动完成功能有两种:
基于当前文件文本的自动完成
基于文件系统的自动完成
我们先说基于当前文件文本的自动完成。在当前文件里,或当前文件用 #include(C 类语言的情况)包含的文件里包含某个关键字时,你可以输入头若干个字母并按下 <C-P>(表示 previous)或 <C-N>(表示 next)来进行自动完成。这两者的区别是,<C-P> 是从当前位置往前找,而 <C-N> 是从当前位置往后找。当只有一个匹配项时,Vim 直接给出完成结果,再次按下 <C-P><C-N> 则取消自动完成。当存在多个匹配项时,Vim 会根据搜索顺序给出匹配项列表并使用第一个匹配项;再次按下 <C-P><C-N> 则可以在列表里进行选择。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Vim 实用技巧必知必会》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥19.9
立即订阅
登录 后留言

精选留言(4)

  • 我来也
    老师的这些常用技巧确实都很实用.

    # 文本目标跳转
    与文件名自动补全一样,有时还是非常实用的.
    既然提到了`gf`,可以把类似的命令`gF`也记一下.
    `:h gF` 和 "gf" 相同,但如果文件名后面跟随着数值,那么光标将定位在该文件名的该行上。

    # Vim 寄存器 / 剪贴板
    今天对数字寄存器0-9和小删除寄存器`-`有了新的认识.之前完全没有留意过这几个.
    作为补充,与`a-z`小写字母的寄存器对应的,`A-Z`大小的寄存器,表示在原来小写寄存器的内容后面追加.(虽然这个也不常用)

    # 常用的寄存器使用场景
    不确定老师是不是为了特意把`"0`寄存器用起来才这么弄.
    我是看了半天才弄明白的.

    在`使用复制、自动选择、粘贴修改变量名`的场景中,如果构建的步骤合适,是可以用`.`命令,更简单的来实现相同的效果.
    就拿图中的状况来说,我的按键序列可能是这样
    1. `*`
      全字匹配光标下的内容`foo`
    2. `cwfoobar<Esc>`
      编辑光标下的单词
    3. `n`
      跳转到下一处匹配的地方
    4. `.`
      重复上次的修改操作
    5. `n.`
      可以不断的重复

    `只要每次构建的命令合适`,就可以用`.`命令方便的实现重复.

    # 宏的录制和播放
    作为补充,与寄存器类似,大写的`A-Z`宏,好像也是在原有宏的后面添加内容.

    # `junegunn/fzf.vim`
    有精力的同学,这个插件可以好好的深挖一下.
    有很多实用的功能待你去发掘.

    # 题外话
    针对MacOS下的同学,我推荐一款神器[paste](https://pasteapp.io/)
    它可以记录历史的剪切板内容. 还可以给他们取别名, 钉起来.

    有了它,应对本文中`两处文本交换的演示`类似的场景,就有了另外一套搞法.

    作者回复: 对你来讲,讲得越多你越开心。但编辑已经嫌我最近几讲内容太多了,还要我砍少点,免得把初学的同学吓跑了。🤪

    2020-08-12
    7
    3
  • 李公子胜治
    老师,我最近学了你的c++专栏,准备实战剖析folly源码,结果根本看不到,老师觉得学习cpp分析源码这种学习方式咋样,另外,我最近买了一本 《c++沉思录》,但是网上说书太老了,请问老师还有必要看吗

    作者回复: 我没说过剖析 folly 吧……而且,像 folly、boost 这样的大库,真要剖析,单一个库就可以写一个专栏了。

    关键仍然是方法,理解了语法要点和惯用法,自然就能看明白代码了。Folly 的代码还是相当清晰的。

    看源码肯定是有用的,不过如果不是自己经常用的,看的体会可能不大。从我自己的角度,我自己没有完整看过哪个库的源码,基本是按需查看。(《STL源码剖析》不算的话,毕竟,有导读的看书比直接看代码还是要轻松。)

    《C++ 沉思录》评价还是不错的,我觉得可以结合学习新标准一起看。毕竟书本身确实是有点老了。反过来,这么老的书评价还不错,说明确实是经典。

    2020-08-16
    1
  • pyhhou
    每一篇都是满满的干货,感谢老师,有几个问题

    1. 文本目标跳转那里,貌似必须是有后缀名的文件名才能跳转过去?像是在 golang 和 javascript 中路径中文件的后缀是默认省去的,就没有办法跳转过去,不知道是不是需要自行配置或者依赖插件?

    2. 用 /... 全局搜索的结果会被高亮表示,但是回到正常模式或者插入模式,这个高亮显示一直都还在。该如何去除呢?感觉像是搜索寄存器里的值一直会显示出来,除非搜索一个全局不存在的东西才能让高亮消失。。。

    3. 关于 a-z 寄存器那里,不知道老师有没有使用上面的习惯。感觉没有刻意去练习并习惯,一般也就临时用用,大概也就用到前 3 个吧。多了真的记不住。0-9 寄存器也是一样。估计还是要借助插件把这些寄存器的内容都显示出来?

    4. 另外有关宏,感觉这个功能挺强大的。不知道老师后面会不会讲更多的应用场景?

    越来越感觉到 vim 的强大。另外认识到好多 shell 上面的工具,像是 fzf,真是节省效率的利器。希望以后跟着老师多多认识并学习这方面的工具。另外,不知道老师有没有计划写几篇来专门讲实际应用的案例,虽然说每一篇针对每个点都有案例。但是我想的是如果能够有一个应用场景把前后讲的这些东西都串起来,这样跟着练习几次,熟练度会大大提高。毕竟 VIM 这东西不练还是不行的,工作中习惯了以往的编辑模式,要一下子应用上老师前前后后讲的这些内容,除非把注意力刻意放在编辑这一块,否则不太容易。

    作者回复: 1. 这个要看相关的插件支持怎么样了(如 vim-go 和 coc、YouCompleteMe 等)。我觉得应该没问题的。用 Vim 内置的这个跳转功能确实不行。

    2. 这个已经说过啦。第 7 讲定义的 <F2> 就是干这个的。

    3. 没啥特别习惯。印象里 a-z 我同时最多用过 5 个?编辑过后也就不记得里面是什么了。

    4. 目前没计划。Vim的功能太多了,感觉讲都讲不完。������

    如果后面能找到时间,看看是不是再搞个加餐吧。

    2020-08-13
    1
  • return
    实用。
    确实有点多, 计划每天学一个,稳健。

    作者回复: 没问题,关键是练熟、掌握。

    2020-08-12
收起评论
4
返回
顶部