2.反过来,煞有其事的找来一本书看,你又迷失在“知识”的海洋里。
3.因为知道学习Vi/Vim这个事情是有记忆成本的,而采用设背景,贴墙纸的方法试图能时常提醒自己不要遗忘各种键法。
看上去逻辑很完备,但是对于一个强调操作和手感的工具,大多数同学的努力实际上找错了方向:找手感需要锻炼的是肌肉记忆而不是脑力记忆。关键的问题不在于你看了多少关于 Vi/Vim 的文章,书,记了多少笔记,脑子是否记住了那些快捷键,关键的问题在于你对最基础的操作有过多少次反复的练习,通过这些大量的练习是否建立起了适用情景和键法之间的条件反射,我这里称其为肌肉记忆。你需要的是通过大量的基础练习强化神经脊髓质的厚度,训练自己建立情景<->键法的条件反射,把这种反射刻在肌肉记忆里,一旦通过训练形成这种反射,在某种程度上,就是比思考或者回忆更有效的应激反应,也就是说你可以省去思考或者回忆的过程,直接对某个场景做出编辑操作,例如:拷贝一段文字到另一端文字后面,删除替换某个词语,回到文件头部等等,你不用去想我该按哪些快捷键去做这些操作,你的双手很自然的就会敲击出正确的键法,省略了耗时的思考,回忆键法的过程,操作者的效率自然倍增。
Vi/Vim 的使用者往往会有这样神奇的体验:小白在你边上看你编辑文本,屏幕上的光标仿佛可以跟随人的眼睛和意念四处游走,操作者没有使用鼠标,完全用键法掌控编辑过程,这个时候小白经不住打断你,询问你怎么复制指定的段落,你往往不能马上回答,你需要重新把双手放回主键盘区,让你的手自然击键给出正确的答案,这就是我们之前说的条件反射替代了思考回忆,记住这个操作的是通过反复训练的肌肉而不是你的大脑,所以手可以迅速地给出答案,但是大脑没办法马上回答,它需要回忆动作,分解操作步骤,最后确认无误,再告诉你答案。通过刻苦的训练建立条件反射从而提高效率,提升技能水平,这其实和世界上其它的技能修行例如:乐器演奏,书法,外语没有任何区别。引申开去,如果你可以在日常生活中更多的运用这个技巧:建立更多的条件反射替代脑力决策,你就可以更高效,更轻松的完成任务。但是这其中又要有适应场景的辨别能力,经典条件反射其实连狗都可以做到,但是听到铃声没见到肉就开始流口水就上当受骗了。
坏消息是你仍旧需要刻苦的训练,好消息是比起乐器,外语等其它技能,练习Vi/Vim建立条件反射的时间并不很长大约在七天左右,花费七天的时间,换取受益一辈子高效编辑的能力,这实在是一笔合算的交易。况且这里面也没有智力差异的成分,如果觉得自己做不到,想想经典条件反射的实验对象其实是条狗,这个比喻虽然让人不好受,但是真的会很激励人,我自己当时在2006年的一个七天长假里练习Vi/Vim的时候基本就没把自己当人对待。练习的学习资料也唾手可得,很多同学满世界找书,找教程,素不知最有用的教程GVim已经自带了,安装完GVim以后,直接键入:
1 $ vimtutor
巧妙的地方在于,这份文本既是一个包含七个章节的学习指南,又是一份可以遍学遍练的习题册,你只需要通读这份文档并按要求操作即可,能够熟练的操作这份文档以后,练习者就具备了使用Vi/Vim编辑文本的基本能力,可以比较从容的使用Vi/Vim应对80%左右的编辑任务。但是在建立反射的初期一定要保证投入足够的时间和练习次数,否则功亏一篑,因此可以在第一遍通读练习完这份教程以后,反复练习这份教程七天左右。无论何时感到百无聊赖的时候,就调出这份教程从头到尾练一遍,保持手热的状态。 有了这个基础做保障以后,你应该尝试沉浸式的学习方法,也就是说,在编辑文本的时候,拒绝除了Vi/Vim以外所有的工具。不要有任何理由接触任何其它的编辑器,如果你是开发者,一定要使用某个IDE,那你也应该看看有没有这个IDE对应的Vim插件:对于主流IDE来说这都不是问题。随后练习者就会步入正轨,渐入佳境:用的越多就越熟练,越熟练就会更高效,更高效就越离不开Vi/Vim,直至开始学习更多Vi/Vim的高阶功能,或者引入更多插件满足更多的编辑需求。形成良性循环以后,一两年里就可以锻炼成高手,这个技能也会伴随你终生,随着时间的推移,你自己都忘记这是一项“很了不起的,很多人没学会”的技能。
以下是装上若干插件以后的效果图:
搜索的艺术:find & grep
我们在前面的博客里反复强调了搜索的重要性,搜索优于导航是提升操作效率的一个关键问题。这里就介绍几个Linux下的常用搜索命令。回忆一下本机搜索的需求大致可以分为两大类:
●按文件名搜索文件
●按文件内容中的关键字搜索文件
在开始解说如何满足这些需求以前,我其实更想强调读者将搜索这个冲动根植在心里,没有这个冲动或者观念你就不会产生想要搜索的需求,大体上你也可以使用鼠标去到处翻文件夹完成等价的工作,区别在于你是想带着目的,付出一些记忆关键字的成本,用最快的速度找到想要的东西,还是漫无目的的浏览,心急火燎的到处乱窜。这里再提一个搜索的小技巧,可以让你直观的感受搜索的强大:在终端界面里有时不可避免的需要重复输入一串很长的命令,这个可能是使用终端的用户相对于GUI最大的抱怨,“反复输入这么长的命令很烦人”,“我怎么可能记得住那么长的命令”,这个时候,你可以只记住这串命令中的某几个关键字,然后在终端界面上按Ctrl-r进入搜索模式,键入你刚才记住关键字譬如gvim:
1 (reverse-i-search)`gvim': gvim 2013-01-07-ubuntu-efficient-software.markdown
这样系统会自动提示你之前输入过的和gvim相关的命令,如果不是你想要的,继续按Ctrl-r提示下一条命令,直至找到你想要的命令,按回车即运行,如果最终都没有找到按Ctrl-c退出搜索模式即可。这个技巧虽然很小但是非常实用,解决了我自己刚入门时一个很大的困惑:)。
find: 文件名搜索
find 命令可以按许多搜索条件来进行搜索文件,最常用的就是按文件名搜索:
1$ find -name readme
2./Dropbox/backup/eclipse/readme
3./Dropbox/backup/windows/EnsoLauncher/readme
4./TestProject/web-workspace/TestStruts/readme
上述命令指在当前目录下查找文件名是readme的文件,如果文件名过长你无法完全记住,可以选加通配符减小记忆负担例如:
1$ find -name read*
2./Dropbox/backup/eclipse/readme
3./Dropbox/backup/windows/EnsoLauncher/readme
4./TestProject/web-workspace/TestStruts/readme
更多用法参考 man:
1 $ man find
grep: 文件内容搜索
grep 是很多有经验的开发者最常用的一个命令,如果你不知道文件在哪里,但是你知道文件中的几个关键字,你就可以把它找出来:
1$ grep 搜索的艺术 * -r
2source/_posts/2013-01-07-ubuntu-efficient-software.markdown:## 搜索的艺术:find & grep
这个是