最近读了《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 的技巧:
- 不要觉得修改自己已经熟悉的快捷键是多困难的事情,记住快捷键是很快的。一开始设置的快捷键可能不是很合理的,勇敢地去修改吧!合理的快捷键更加好记!
- 将自己平时操作觉得很烦的地方都记下来,有时间相办法去优化,写命令,或者找插件。解决自己的痛点。不要就这么忍着,你忍一次就会忍无数次。你怎么度过今天,就会怎么度过这一生。
- 去观摩其他 Vim 用户写代码(当然要在人家允许的情况下),从其他人的屏幕上能学到的技巧更多,因为你看到的都是人家日常用的,如果不好用人家也不会用。有时候还能发掘出跟多好用的软件呢。
- 逛逛 Github 的 Vim 插件,Follow 一些 Vim 插件的作者,有时候会发现一些有用的插件(虽然大多数时候发现并不是自己需要的)。
此书是我老板推荐给我的唯一一本Vim书籍,看完了觉得很好很强大,唯一的问题是很多技巧到用的时候想不起来,能应用的次数也不够多。看来还是得使用那种每周重点关注某一个技巧的方法。
这样的书可以放在桌子上,时常翻一翻。有些当时看起来没啥印象,或者觉得没用。之后看的时候说不定就理解更深了,或者带来灵感了。
这本书的英文名是什么? 《Practical Vim》?
是的 就是这本。不过中文翻译的蛮好的 可以看中文
这本书不错,我也写了几篇关于它的阅读笔记。
BTW,新年快乐!
新年快乐
fish and chips
我只按了 4 下键盘就实现了 fish 和 chips 的交换,假设光标在 fish 的左边
1. M-f
2. C-spc
3. M-f
4. C-f
5. [f1]
注意,我把 f1 绑在了 jagger-swap-sexps 这个函数上。
可以从这个链接上了解一下这个函数:
https://github.com/twlz0ne/jagger/blob/master/jagger-util.el
Cool,不过对我来说还是有点复杂了,在操作的时候要思考光标位置,下一步操作方式。直接删掉重做还是轻松一些。离的较远的话就直接删掉重做两次。
哈哈,确实。
对我来说很简单的。前 4 步 只是做一件事情: 选中 and 。 就像用鼠标选中指定字符一样。
对我来说,已经是肌肉记忆了,在前 4 步的时候, 不会思考任何东西。
最后一步,只是执行一下这个函数啦。
修正一下,是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!
用到的函数分享下一:
分享一下我使用 Vim 的经验。
没有专门的学习过 Vim,Vim 的操作方式还是在用 Emacs 的时候学的(Evil mode),后来发现比 Emacs 的 Ctrl 组合键方便多了,就把所有编辑器都换成了 Vim 的编辑模式,有什么不会也只是用到的时候 Google 一下。在我看来,刻意去学习工具的使用,没什么意义,最好是在实践过程中来练习。
我日常使用最多的命令:
o
A
I
dd
p
ciw
ci”
Cool,Vim 的 Text object 很实用。刻意去学工具,可以发现一些平时自己都忽略的“痛点” 啊