本文是针对vi来说的,因为它及它的变种在*nix上使用最广泛,但是挫败的用户数却最多。用户遵循某安装或者配置指示,一路顺利,直到遇到:“用vi编辑xxxx.conf,在其中加入xxxx”,没经验的用户不但无法继续,就连退出vi都是一个难题。
虽然*nix上还有其他更适合windows用户习惯的编辑器,但是它们不一定随时可用(如:没有安装)。我承认vi不好用,但是,掌握最基本的vi用法,利用vi来配置系统,以获取你更喜欢用的编辑器,例如我用的是vim,它的操作和vi是一脉相承的但是增加了很多适合程序员的特性。如果你需要在*nix上看手册(man),那么你会发现man的操作也和vi如出一辙。
vi有一个10分钟的tutorial,号称10分钟就可以学会,但是这个tutorial却不是随vi安装的,而是在vim中。
这个tutorial我也学过,10分钟肯定不够。不过我不认为还有比这个tutorial更好的入门指南。
要开始这个tutorial,在你的终端输入vimtutor,英文不好的输入vimtutor zh
现在假定你已经学过这个tutorial,对vi有了初步的认识,接下来谈一些个人的看法。
有模式的编辑器
人们经常这么称vi,其实严格说来,windows下的GUI编辑器也是有模式的,例如,你在输入中,双手持键盘,显然,你不能同时用鼠标,此时你在键入模式中;当你右手离开键盘去用鼠标,此时你进入了命令模式,键入已经无法进行。
有一种无模式的操作方式:快捷键。它不需要鼠标,可以一直处于键入模式中,所有的功能操作都用功能键(如Ctrl,Alt,Shift)参与的按键组合来完成。EMACS把这种方式发挥到极致,它的用户们一直希望脚踏板成为标准PC配件。
因此,如果你不是EMACS方式的拥趸,模式不会成为你和vi之间的隔阂。
操作方式
GUI编辑器都有一贯的操作方式:用鼠标移动光标位置、确定操作范围,然后按键操作。这使得用户很容易就能上手。
vi在命令模式下,也遵循类似的方式:移动光标,然后不同之处在于,先确定操作,然后再确定操作的范围。
举一个例子会比较清晰,假设要删除全部文本,比较一下GUI编辑器与vi分别是怎么操作的:
GUI编辑器 先用鼠标定位到文本的第一个字符,然后按住鼠标左键开始往下拖至文本的最后一个字符,然后按Delete键。
vi 进命令模式,依次输入1G(光标移动到第一行)d(准备删除)G(光标移动到最后一行)
记忆负担
还用前面的例子,你会觉得,要记住G(表示光标移动到某一行)的含义,除此之外,还有w,e这些表示移动的字母,但是只要你愿意,你完全可以只使用hjkl这些一次一行或者一列的移动方式,如果这些也记不住,你使用光标键总没问题吧,很快你会发现这样很慢,所以你才寻求快捷的方式。如前面例子中GUI编辑器中选定全部文本,稍有经验的用户也不会那么做,他们会用一个快捷键(Ctrl+A)来全选,那么,这个Ctrl+A他们当初也是花时间去记的。
根据你的实际工作,你可能只需要vi的很小部分命令就足够了,那么你就没必要把vi的所有命令都记住。直到有一天,你有新的任务,而你不能忍受现在的操作速度,那么你自然会学习更多的命令。