我的vim二三事

前言
选择你所喜欢的,爱你所选择的–列夫·托尔斯泰
不是理由的理由
用了几年Vim,我发现我越来越喜欢它了,和好多人一样喜欢它,也许喜欢的理由各不相同,但大抵有如下几个:
- 即使你用了几年了,你还是会在某天惊呼原来还可以这么操作,它总会给你带来惊喜。
- 当你要操作的时候你根本不用去想那些快捷键(也许不能叫快捷键,它是谓语{operator}和宾语{text-objects},组合在一起形成不同指令,好像自然语言),它们就在你意识里。也许开始的时候你需要去记一些快捷键(别的编辑器不用吗?),但记住以后你熟练了,就像是骑自行车,你就忘记它的存在,你只用输出你的思想,它让你更专注你要做的事情本身。
- 虽然会有很多的快捷键以便让不同的人找到他们最佳的操作方式,但是每个人常用的不外乎特定的十几个快捷键,而这些快捷键都是有内在逻辑让你记住的,比如:d(elete)删除,D(elete)删除到行尾,d(elete)
a w(ord) 删除一个词。 - 如果懒,那么你学Vim是没错的,它是变化中的永恒,那么多的编辑器更新迭代,它们都有vi模式或vi插件,你可以用你所学,一如既往。
- 它有非常多的插件,你可以定制一些自己喜欢的强大功能。(这其实也是个缺点的吧,毕竟自己配置多费时间呀,不过好些人一个配置用了十多年)。到底有多强大呢,看看知乎上这篇文章。
我知道上面这些说得太抽象了,也许我们应该来点具体的,你可以边看边对比一下你使用的编辑器的操作:
编辑 | 用 Vim |
---|---|
如何向下移动7行 | 7j |
如何删除一个词(word) | dw |
如何删除一行 | dd |
如何删除{}里的内容 | di{ |
光标移动到第80行 | 80G |
如何在当前文件里搜索光标所在位置的词 | *(#) |
如何在50行到100行之间查找并替换 | :50,100/old/new/g |
如果你想在同一文件中对比两个不同的块时怎么做 | :sp (to ‘split’ the view) |
如果你想要打开光标所在文件名的文件 | gf (which means ‘g’o to this ‘f’ile) |
如果你想要得到每行前10个字母而它后面的数据不是你想要的 | ctrl-v (win 下是ctrl-q) |
如果你想要转换别人给到你的混合大小的文件变成小写 | 1GVG u |
录制一系列命令然后执行 | 用宏 |
在width:16px的数字16上加20 | 20 ctrl+a |
输入23+45+119的结果 | ctrl+r=23+45+119 |
以上的这些操作都是直接在键盘上操作的,没有用鼠标。
喜欢一个人的时候总能说出好多的理由,而不喜欢却只需要一个理由。此时我赞美我的女神你也在心里列举了你心中女神的诸多可爱美丽特点。所以可以想象各种关于编辑器文章下的各种互喷吐槽,即使是同一个编辑器的文章下也不免相互吐槽,毕竟不同人理念也是不一样的。
有所为有所不为
vim是个高效的文本编辑器,在文本编辑这一领域可谓是独步天下,高手使用vim处理SRT字幕内容,痴迷者除了使用vim写代码、发邮件、看股票、写博客、写markdown(这篇文章就是vim写的markdown)还使用vim浏览网页,普通人可以把它作为普通人的编辑利器。在文本编辑领域,后来者只有模仿而无法超越vim。小李飞刀独步天下却也砍不了骨头,在代码编程领域,公认的最适合的场景是做Unix/Linux服务器编程,不用下载服务器端的文件而直接修改;其次是编写html/css/javascript/shell/python/c等;最后在mac、linux下要改文件用系统带的vim随手改改。而编写Java
EE、Objective-C等还是用Eclipse、XCode等IDE的比较好。
君子性非异也,善假于物也
vim只是一个工具而已,它并不能让你码代码的能力提升,只能帮你更快速地输出你的思维。每一个工具都有它特定的场景,聪明的人总会在适当的场景做出合适的选择。好多人都说学习起来好难的呀,投入的成本换来的收益是不是成正比的呢?我觉得还是值得的,上面也说过,它是万变中的不变,同时它真的是个高效的工具,另外也许最后出来的高效的编辑外还带给你一些东西,比如好奇发现带来的惊喜,又如你发现你用了几年还有好多不会的谦虚,还有用宏解决了一个棘手问题的喜悦。最后它只是一个工具,是雕刻林诗音松木人像的小刀,或是冠绝武林的小李飞刀,关键在人。
不积跬步无以至千里
佛渡有缘人,细想这个‘有缘人’还挺有意思的,其实就是信的人,不信的说再多也是没有用的。如果想学,不必卸载你的是编辑器,做出破釜沉舟之势,万一用了两天觉得不方便或是有紧急的要修改的内容,要换回来用熟悉的编辑器。另外也不要觉得一时学不会就感觉挫折,毕竟很多东西都不可一蹴而就的,需要一点积累,所以慢慢来的。那些《7天XX》《21精通XX》真的害了好多人,慢慢来,实在不行认为自己笨了,不还有勤能补拙吗?好多的编辑器都有vi插件或模式,你可以找一找然后装上试试的,等熟悉了觉得不满足了再换成vim,要是觉得一直用vi插件也不错的就一直用着,能解决问题的顺手的才是最高效的。
选择你所喜欢的,爱你所选择的
我在小学的时候搞了个小霸王说要学习五笔,然后字根没有背完就忘记了,大学时候再一个想起这个事决定再学五笔,然后没有几天又放弃了,毕业两年后想起学五笔这个事,心里有个结,于是又学起来了,然后一直在用,虽然是五笔混合模式,偶尔也用纯五笔模式。vim就是在我可以用五笔的时候开始学的,当时拿同事的vimrc来直接就用了,现在也在用的,只是改了少许的地方,一直在够用就好的状态,然后在用的时候觉得有什么不自然的地方就找一下答案的,慢慢地越来越顺手了。细想我这个慢方法还是可取的,那么多我的命令我只会我常用的十几个,但那也是够用的了,并且是越来越喜欢,看着别人用的也还常发现还有很多不会的东西。
再回首,一切是那样自然,一如vim的理念keep it simple,我也只装了平时常用的几个插件,还有一些比较强大的插件也没有用得着,所以没有装上。最近为了给同事们讲一下vim,才意识到虽然平时说vim有几个模式,但是用的时候自己也没有区分得很清楚,觉得就是一个整体,应该那样,有时候我们只是为了区分和认识一个东西才把它解构了,就像一首好的歌曲,我们只用觉得好听,那些乐评人说的为什么好感觉都很有道理。vim命令有多难记也还是有逻辑的;vim里可以快速精确的查找定位;vim真的好像一切文本皆对象,操作针对字符,词,行,块,文件这些对象;vim的设计哲学是如果你的工作只需要做一次,那没问题,怎么搞都行,如果你的工作是要重复地完成某些工作,则vim总可以帮你找到更少的按键方式来实现相同的目标。如VimGolf所说Real Vim ninjas count every keystroke - do you?