推荐 Vim 进阶书籍:《Vim 实用技巧》

最近读了《Vim 实用技巧》这本书,也是读的第一本有关 Vim 的书。此书是一种 Cookbook 的形式,每一个章节给出一个 Vim 的技巧。但是又不同一般的 Cookbook 书籍那样草草的给出解决方案,然后告诉你为什么。这本书会告诉你如何以一种“Vim 的思想”来做事情,如何将操作变成肌肉记忆,对已经能够使用 Vim 的同学来说,是居家旅行良品。

但是此书不太适合刚刚接触 Vim 或者想要开始使用 Vim 的同学,Vim 的学习曲线是比价陡峭的,这本书适合急速上升的那个阶段。对于刚刚入门的人来说,我觉得最好的方法还是删掉电脑上的 IDE 和其他编辑器,强迫自己使用 Vim,大约一个星期,基本上就能够习惯 Vim 的几种模式和 hjkl 移动了。然后你可以翻看这本书,去了解一些 Vim 里面的概念和思想,甚至还能学编辑器历史。

这篇文章记一下我从这本书学到的东西。

:help 是一个好东西。这本书也在极力像你推荐这个工具。很多地方都是一句话带过,然后后面跟上一个括号鼓励你自己去看:help 文档。其实我也知道看到文档,尴尬的问题是,我经常遇到的问题不知道是啥,在 Vim 里面叫啥,该去查什么 help,甚至我连怎么 Google 都不知道。这就是因为不知道 Vim 里面的一些概念。比如我之前经常不小心进入命令行编辑界面(按 q: 跳进去的那个)不知所措,我是谁,我在哪……看了这本书我知道了这是可以用上 Vim 基本所有的 feature 来编辑命令的一个界面,用于编辑长命令或者查看历史。是命令模式的一个升级版。这样的东西还有很多,所以我对这本书是相见恨晚啊!

从这本书中,我觉得最有用的一个思想是:编辑、重复、撤销。这个技巧的一个核心思想是:不要思考。比如要删掉 7 个单词,你可以选择 d7w ,一下子删掉 7 个,也可以选择 dw 然后按 . 重复 7 次。第一个选择你需要在心里算一下一共有多少个单词,需要按几下,这样就会打断你的思路。但是如果无脑的按 7 下就不需要思考了。那万一按错了怎么办?另一个重要的技巧是:所有的操作都成对出现。比如重复操作 . 对应 u 撤销操作;向前搜索 ; 对应退回 , ;回到上一个位置 Ctrl-o 对应 Ctrl-i。重复的时候无脑按就可以,发现按多了的话立即按撤销操作,可以形成肌肉记忆。另外一半“重复”操作都是使用的 . ,. 表示重复上一次的修改,这个“一次”很重要。需要注意一下尽量将操作合成一次,如果一次修改是由两次操作构成的,就不可重复了。

另一个我觉得比较好的思想是“重做比修复更快”,虽然这本书很少提,我忘记在哪看到的。举个例子,比如你打了 “bsah”,想改成“bash”,那么最快、最不用动脑的做法就是 ciw 然后重新打一次。无论对 vim 再熟练,这个做法一定是最快的(虽然可能别的路子可以让你少按几个键,但是不用思考才是王道,将脑子用在你要写的程序上面)。书中技巧 62 提到的是将 “fish and chips” 替换成 “chips and fish”,最少的替换方法也要按将近 20 个键,不如重新打一次呢。

Vim 的技巧很多,比如自动设置的标记,各种 text object 组合,快速移动等。而这些技巧的来源除了权威的文档,还有各种论坛,各种书籍,偷窥你同事的屏幕等等可以学习。这些都是比较零散的,还比较难记。但是 Vim 的学习就是这样的,各种各样的技巧,学的越多,用的就越熟练。对于这种零散的技巧,我的一个方法是:将平时学到的技巧用便利贴记下来,写代码的时候不时瞄一眼,渐渐就学会了。不必死记硬背,多用几次,感受到它的存在,渐渐的就记住了。建议你在读本书的时候就这样做。

另外很多概念、命令记起来非常复杂。比如 w 是快速移动一个单词,W 是快速移动一个“字”,那什么才是字呢? 空格隔开的算啥? "';: 这些符号隔开的算啥?我的经验是,这些都不必去记,如果一个操作你需要思考的话,速度就已经慢下来了,还影响你的思路。你的脑子应该用在考虑代码逻辑上,而不是用在怎么把代码打出来。拿刚刚这个例子来说吧,就简单的理解成“W 是更快的 w ”就好啦!如果移动多了怎么办?再用 w 或者 h 移动回来就好了呗。无脑的重复、撤销要比思考快的多。但是注意,无脑的重复也有高效的和低效的,如果你连 w 和 W 都不知道,那么就只能用 l 来移动了,这是无论你思考还是不思考都快不起来的。

这本书的第六部分和前面一些章节介绍了一些 Vim 插件,有一些已经过时了。比如现在文件浏览大家一般都用 NerdTree,还有好用的 CtrlP 这种模糊匹配的工具等。但是也建议看一下吧,了解一下各种插件的角色,看看他们的设计思想。说不定哪一天你也要写一个插件才能解决自己的问题呢。

 

最后再推荐几个我觉得可以快速提升 Vim 的技巧:

  1. 不要觉得修改自己已经熟悉的快捷键是多困难的事情,记住快捷键是很快的。一开始设置的快捷键可能不是很合理的,勇敢地去修改吧!合理的快捷键更加好记!
  2. 将自己平时操作觉得很烦的地方都记下来,有时间相办法去优化,写命令,或者找插件。解决自己的痛点。不要就这么忍着,你忍一次就会忍无数次。你怎么度过今天,就会怎么度过这一生。
  3. 去观摩其他 Vim 用户写代码(当然要在人家允许的情况下),从其他人的屏幕上能学到的技巧更多,因为你看到的都是人家日常用的,如果不好用人家也不会用。有时候还能发掘出跟多好用的软件呢。
  4. 逛逛 Github 的 Vim 插件,Follow 一些 Vim 插件的作者,有时候会发现一些有用的插件(虽然大多数时候发现并不是自己需要的)。

推荐 Vim 进阶书籍:《Vim 实用技巧》”已经有11条评论

  1. 此书是我老板推荐给我的唯一一本Vim书籍,看完了觉得很好很强大,唯一的问题是很多技巧到用的时候想不起来,能应用的次数也不够多。看来还是得使用那种每周重点关注某一个技巧的方法。

    • 这样的书可以放在桌子上,时常翻一翻。有些当时看起来没啥印象,或者觉得没用。之后看的时候说不定就理解更深了,或者带来灵感了。

    • Cool,不过对我来说还是有点复杂了,在操作的时候要思考光标位置,下一步操作方式。直接删掉重做还是轻松一些。离的较远的话就直接删掉重做两次。

      • 哈哈,确实。

        对我来说很简单的。前 4 步 只是做一件事情: 选中 and 。 就像用鼠标选中指定字符一样。

        对我来说,已经是肌肉记忆了,在前 4 步的时候, 不会思考任何东西。

        最后一步,只是执行一下这个函数啦。

  2. 修正一下,是5下。

    如果为了不引起争议:

    我还可这这么干:

    在 .emacs 中写好:

    1. [f2] -> M-f
    2. [f3] ->C-spc
    3. [f4] ->M-f
    4. [f5] ->C-f
    5. [f1] ->[f1]

    然后

    f1 f2 f3 f4 f5

    boom, you got what you want!

  3. 用到的函数分享下一:

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注