碎碎念

2006, March 29

文本工具箱——“vim”篇

Filed under: vim

文本工具箱——“vim”篇

Vim是Vi的一个改良版本。Vim是跨多个平台的,这样Windows的用户也能用到了,在早先的版本中Vim对中文的支持不是很好,但6.3版本后的Vim对中文的支持堪称完美(事实上我早先接触Vi时,意识到那是个可以提高编辑效率的工具。但在Windows平台我找到的几个Vi的Clone如WinVi、vile、lemmy、xvi,对中文的支持十分糟糕,最后找到了Vim。如果你用Vim发现到中文支持不好意味着你使用的可能是未加“+multi_byte_ime +multi_lang”选项编译的Vim版本)。Vim的完整安装包中包括了命令行程序Vim和图形介面的gVim。

名称:VIM - Vi IMproved
描述:交互式文本编辑器
平台:几乎所有操作系统都支持……
大小:500KB-10MB。Windows上的Vim6.4完整安装后10MB左右,但只有主程序(gVim2MB或Vim-500KB)是必需的。
主页:Vim.org
下载:gVim v6.4下载页
gVim64 Windows安装包(含多语言支持)

Vim是我目前用过的最好的“交互式”文本编辑器,这当然只是主观的想法。但客观来讲,就软件的大小、支持的功能数、可扩展性、完成任务的高效性上、定制的灵活性、平台的支持和与其它工具的协作能力上等客观的标准来说也完全地超越了其他的(商业与非商业的)交互式文本编辑器。如果要说有什么缺点的话就是不易学——就我而言由于长期以来在Windows平台上的编辑习惯使得在初用Vim时很不习惯,但你不能要求一个强大的编辑器在能够很容易上手。然而单就经常使用的功能而言Vim并不难学。
Vim中可以方便地调用其它命令行下的“过滤程序(filters)”,我常用的是Awk与Sed可以用来帮助Vim完成一些复杂的操作(有些用Vim也可以完成,但分工可以提高效率!)。
Vim是免费的(公益软件),如果你没用过Vim的话马上下载来用一下。如果你没用过Vi/Vim的话可能不会意识到我说的这个程序与其他的编辑器的区别竟然如此之大:

  • 首先Vim是有模式的。
    这意味着你无法在运行Vim后直接输入文字(除非加了“-y”选项),要输入文字要先按“a”或“i”。我当初对此相当困惑——连输入几个字都这么麻烦,但慢慢地我了解到模式正是Vim强大的秘密!
  • 其次,菜单上几乎没提供任何编辑功能。
    功能看上去十分阳春,就跟笔记本差不多(Windows平台的Vim提供了与Windows其他编辑器兼容的编辑配置)。
  • 再来是底部的一行命令输入窗口……
  • 还有就是菜单上找不到“首选项”“属性”“定制”或其他对编辑器进行设置的地方……
  • 最后是打开多文档时没有标签。

大概看了这些很多人就打退堂鼓了。对这些可能的第一印象,我们还是逐条看过吧:

  • 模式。
    模式让键盘彻底解放出来了,这样我们的键盘就有更多用途而不只是一个打字机的键盘了。
    看一下例子:

    Vim有很多模式,其中一个是命令模式或叫ex模式。看看以下ex模式命令:“:g/^/m0” 可以将文件中的行倒置,第一行成了最后一行,第二行成了倒数第二行……

    即使你的编辑器有一个倒置行的菜单项也肯定没有以下功能:“:g/Vim/t$” 将所有包括“Vim”字符的行汇集到文件底部(稍做改变,就能让所有链接收集到文件底部)。模式让我们能用键盘来完成文本输入以外的任务,其它编辑器是通过菜单、工具栏和快捷键来完成这些工作的是预先定义好的功能无法做到像Vim这样便捷性、灵活性和复杂性(请注意,Vim也有菜单、工具栏和快捷键并且是可定制的)。

  • 菜单。
    菜单是可定制的,但是还是尽可能的用命令吧!毕竟这是Vim之所以为Vim的一个重要原因。
  • 命令窗口。Vim的很多功能命令都是通过键盘来实现的,用命令窗口可以查看一些当输入的命令信息(如要转到88行我们输入“88G”,我们可以在命令窗口上看到自己的输入的情况,不会多输了一个8而不自知)。而对一些复杂命令,我们更需要在命令窗口中修改命令。因此命令窗口对于Vim这样有模式的编辑器是必须的——总不能用“盲打”的方式输入命令吧。通过Vim命令窗口可方便地调用过滤程序——这又让Vim的功能进一步扩展了。
  • Vim的配置是通过配置文件来实现的。
    但没有提供图形的设置界面,我觉得没什么影响,也就一次编辑的事,但有提供的话当然更好。
  • 没有标签。
    我开始对此也不太习惯,现在觉得这样方式挺好不占空间。而且Vim提供了“# % next rewind first last previous snext …… ”等一堆的命令。而且我一向认为用软件就要入乡随俗,用Vim就要彻底一点。

我相信任何人只要坚持用一段时间的Vim不管他喜不喜欢或会不会继续使用,他一定会承认这一点:Vim在提高文本编辑效率上比其他的编辑器要更有潜力。

就说到这儿了,Vim相关的内容太多了。现在就下载来试一下吧。

提示:先读一些相关的教程之后再进行操作……。在操作之前确认你知道怎么在不同模式之间切换;知道怎么输入文字和退出 :-)

3 Comments »

The URI to TrackBack this entry is: http://blah.blogsome.com/2006/03/29/texttools_vim/trackback/

  1. 前段时间在善用佳软的博客上受影响用了几天VIM,虽然下手很容易,但总之是不太习惯。因为初学的关系,好多在Emeditor上很容易就实现的功能,到了vim上就要查询半天。

    其次,如果做为普通文本编辑功能来说,使用VIM使用有些大材小用了。我用Emeditor完全够用。

    另外,不知道GVIM中能否实现自定义键盘来实现词的移动呢?比如默认的W/B,不是一整段的移动。而是能够实现按照标点符号来移动呢?这一点在Emeditor中非常好(不过由于Emeditor是收费软件,所以我还是想转到GVIM中)。我觉得VIM是应该能够可以自定义这个功能的,但我初学,还不懂,最好你能够明确地告诉我应该怎么设置。

    Comment by eikc — 2006, July 31 @ 01:49

  2. > Emeditor上很容易就实现的功能,到了vim上就要查询半天。
    我不知道你指的是那些功能,但这就是学习的过程。慢慢你会发现在Vim上容易实现的功能在其他编辑器上实现起来很麻烦,甚至不能实现。

    > 其次,如果做为普通文本编辑功能来说,使用VIM使用有些大材小用了。我用Emeditor完全够用。
    Vim就是一个通用目的的编辑器,它开发出来的目的就是用来进行普通文本编辑。它不是为了某些神圣目的或为某群人而开发的,它在提高编辑效率的理念下开发和发展的。它有一些强大的功能和特性,但这不代表它不适宜做普通的文本编辑工作。用好Vim也不以掌握这些强大的功能和特性为前提,熟练掌握了Vim的基本编辑指令(如,移动,查找,插入,添加,复制,删除)就能大大提高编辑效率。所以没有大材小用的说法。

    至于自定义W/B键行为,假设你说是指按标点符号来移动。我的第一个建议是使用更灵活的搜索。如f?,T?(用; ,移到下一个或上一个匹配);用这种方式你只需两次击键就可以迅速移动到任意位置(在当前行内)。

    当然也可以用//或??(在当前文件内)。如,/?/(用N或n移到下一个或上一个匹配)。

    如果你坚持只用一个键。可以写一个map来代替缺省的W/B行为:
    nnoremap <silent> W :call search("[?。,;!,.;]","esW")<CR>
    nnoremap <silent> B :call search("[?。,;!,.;]","ebsW")<CR>

    Comment by hq00e — 2006, August 1 @ 12:40

  3. 呼呼,正好两种我都用,而且都很喜欢,顺口说两句。

    vim非常强,尤其是在写代码的时候,而且也的确谈不上难用。如果要用linux,要写代码,花上一些时间去了解和习惯vim是非常值得的——除非对emacs更有兴趣。但vim也确实有些地方对中文用户不太友好,毕竟这是个以英文为母语的人写的程序。而且在windows里,vim一直有程序无法完全退出的问题。

    emeditor我觉得是win32平台下最好的原生编辑器了。对windows用户来说,学习曲线更平缓,而且大部分vim做得到的事他也做得到,虽然有一部分可能没那么完美。

    我个人是写中文用emeditor,写代码用vim。

    Comment by Camel — 2007, March 8 @ 12:12

RSS feed for comments on this post.

Leave a comment

Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>



请输入验证码。

Get free blog up and running in minutes with Blogsome
Theme designed by Jay of onefinejay.com