今天逛知乎,看到一个问题,,底下回答说,他高中时琢磨乒乓球抽奖游戏,算出了中奖概率,后来才发现有排列组合这种东西,而这个东西明显比他们琢磨的公式更具有普遍性。下面答主又说了一句话,没有走过弯路,就体会不到它带来的高效,只有被剧透的麻木,这句话让我感触颇深,不禁让我想起当初学VIM时的惊喜,正是这种惊喜,让我对它情有独钟。
刚学C语言的时候,用的是VC++6.0,后来换成了vs2008,用了差不多一年,才开始学vim,学了一段时间之后,立刻被它吸引了。
因为自己刚开始经常漏掉分号(现在偶尔也漏掉- _ -||),才感觉A这个命令是多么地顺手。
因为经常编译错误,然后根据错误报的行号来查找代码,才发现NUM+G这个命令定位错误是多么地迅速。
因为经常要写了一段代码之后再添加头文件,才发现gg这个定位到文件开头的命令是多么地方便。
因为经常写HTML文件,才发现vim内置的文本对象t多么地让我们眼前一亮。
因为经常用fopen或者file这些函数打开文件,才觉得vim的ctrl+x ctrl+f这个自动补全是多么地猿(程序猿)性化。
因为原来学OpenGL经常写这种代码:
x_m = sector1.triangles[loop_m].vertexs[0].x;y_m = sector1.triangles[loop_m].vertexs[0].y;z_m = sector1.triangles[loop_m].vertexs[0].z;u_m = sector1.triangles[loop_m].vertexs[0].u;v_m = sector1.triangles[loop_m].vertexs[0].v;glTexCoord2f(u_m,v_m); glVertex3f(x_m,y_m,z_m);x_m = sector1.triangles[loop_m].vertexs[1].x;y_m = sector1.triangles[loop_m].vertexs[1].y;z_m = sector1.triangles[loop_m].vertexs[1].z;u_m = sector1.triangles[loop_m].vertexs[1].u;v_m = sector1.triangles[loop_m].vertexs[1].v;glTexCoord2f(u_m,v_m); glVertex3f(x_m,y_m,z_m);x_m = sector1.triangles[loop_m].vertexs[2].x;y_m = sector1.triangles[loop_m].vertexs[2].y;z_m = sector1.triangles[loop_m].vertexs[2].z;u_m = sector1.triangles[loop_m].vertexs[2].u;v_m = sector1.triangles[loop_m].vertexs[2].v;glTexCoord2f(u_m,v_m); glVertex3f(x_m,y_m,z_m);
才觉得vim的块选择(ctrl + v)替换数组下标是多么方便。
因为经常要修改一行代码上的某个字符,才发现[f|t]+letter和; ,这几个命令配合起来是多么地犀利。
因为经常要上下左右移动,才发现原来hjkl这四个位于home row上的按键,真的要比箭头键快很多。
因为经常要批量注释,才发现tim pope的插件的gc命令真的要比vs的ctrl+k ctrl+c快很多。
因为经常纠结于代码风格,才发现.这个命令对于在运算符两边添加空格真是神器(移动到加号上,s空格+空格Esc,然后遇到+(配合f+;命令)就狂按.)。
因为经常查找,才发现开启了hlsearch的/命令真的要比Ctrl + f好用很多倍。
因为:wq用的多了,才感觉ZZ用起来是多么地顺手。
因为Esc键按多了,才感觉将CapsLock(大写锁)映射成Esc键是多么地舒服。
因为经常要移动到函数末尾,才发现原来]}要比[[%快一点。
因为删除半行代码多了,才发现原来不仅可以用c$,还可以直接用C。
因为在某行下添加代码这种修改做的多了,才感觉o真的要比End再加回车键要快多了。
因为查找函数定义,变量定义多了,才发现原来不仅有/命令,还有#和*这两个神器。
因为拼写错误多了,才感觉插入模式下的ctrl + w和Ctrl + h,真的比Backspace键好用多了。
除此之外,还有种种,种种。我想,正是因为我代码写的多了,各种笨办法用的多了,当见到vim各种神奇的命令之后,我才会去彻底拜服,从此不能自拔。。
这仅仅是我的个人一篇感想,就是想告诉大家,不要怕犯错,不要怕走弯路,这样遇到了真正神奇的东西才不会有那种剧透的乏味。同时,我也无意抬高vim或者Linux,贬低Windows或者其他编辑器。这些东西本质都是工具,真正体现程序员水平的东西不在于他用什么工具,而在于他写出了什么样的代码,具有什么样的编程思想,这才是真正值得别人尊敬或者崇拜的东西。