Begin VIMming - Basic Skills I

VIM(pronounced /vi:m/)——Vi IMproved的缩写,是一款在多平台上均表现出色、能够令我们事半功倍的文本编辑器。《程序员修炼之道》(The Pragmatic Programmer: From Journeyman to Master)一书上教导我们,掌握一款能够在多平台上功能强大的文本编辑器的必要性。可能对程序员来说,没有比一款得心应手的文本编辑器更重要的工具了吧:-)

我第一次用VIM应该是初学Linux的时候,算算也已经4、5年了。曾经尝试过另一个大神级的editor——Emacs,但显然本人木有达到大神的境界...还是VIM比较通俗易懂一些,所以渐渐就Stick到VIM了。不可否认,相对于一些“现代”的GUI Oriented的文本编辑器,如Notepad++、UltraEdit等,VIM的学习曲线是比较陡峭的(虽然比起Emacs个人觉得要容易许多,当然这因人而异),这也是阻止许多童鞋接触VIM的主要原因。事实上,也有许多博客在宣传VIM方面做了很多工作,比如善用佳软

我在学习VIM的过程中看过许多Tutorial、参考过许多博客,当然自己也在使用中积累了一些经验。最近发现有一些有趣的技巧一段时间不使用容易淡忘,所以决定写几篇博客,总结我认为经典而且实用的VIM技巧,一方面分享使用VIM的经验,一方面也让自己整理一下过去所掌握的技巧,所谓温故而知新。因为参考了许多地方,如果文中有没有引用到原文的地方,请原作见谅。

絮絮叨叨了许多,下面就进入正题吧。因为VIM相关的内容比较多,一篇文章中很难细说,所以暂时打算分为四个部分来写。

  • VIM basic skills
  • VIM customizing your vimrc
  • VIM plugins
  • VIM advanced topics

难度由浅至深,今天从第一部分开始,也就是介绍一些比较实用的基础VIM编辑技巧。正如开头所说,本人远非“大师”或者“大神”,只是总结自己的经验,如有出错之处,请指出。

VIM Basic Skills

考虑有些接触VIM较少的童鞋,我觉得有必要从最基础的知识开始讲起。其实学习VIM的最佳途径是阅读它自带的Help文档,但是由于这个Help是英文的(也有中文汉化)而且它比较长,所以我就把其中我认为最重要的内容提取出来,再加上一些文档中没有集中提到的有用的技巧。

VIM编辑模式

和大部分文本编辑器不同,VIM编辑器存在许多种工作模式,这也是很多第一次接触VIM的童鞋连如何输入字符都不知道的原因。

所以在开始学习VIM之前,必须要对它的常见工作模式有所了解。在VIM的帮助文档中总共提到了7种模式,我主要介绍其中常用的4种:

  • Normal Mode,普通模式
  • Insert Mode,插入模式
  • Cmdline Mode,命令行模式
  • Visual Mode,选择模式

Normal模式

VIM启动之后,默认的工作状态就是处于Normal模式。在任何时候,你都能通过按两下"Esc"键回到Normal模式。在这种模式下,用户的输入将被VIM解释为VIM功能键。所以启动VIM之后,直接在里面输入文字是不行的。我们需要从Normal模式转换到Insert模式,才能进行输入。

Insert模式

这是我们进行文本编辑的时候所使用的模式,在这种模式下,我们就能够输入文本了。从Normal模式转换到Insert模式一般有如下几种方法:

  • 按i键(insert),在当前位置插入新文本
  • 按a键(append),在当前位置后添加新文本
  • 按A键,在当前行的末尾插入新文本
  • 按I键,在当前行的开始插入新文本
  • 按o键,在当前行的下一行插入一行
  • 按O键,在当前行的上一行插入一行

Cmdline模式

这是用于输入命令的一种模式,在Normal模式下切换成Cmdline模式的方法有三种

  • 按:键,进入命令输入模式,可以输入一些VIM中定义的函数,比如:help就可以查看VIM的帮助文档
  • 按/键,进行正向搜索,比如/hello,就可以搜索当前文本中出现的下一个hello字符串
  • 按?键,进行前向搜索,比如?hello,就可以搜索当前文本中出现的上一个hello字符串

Visual模式

这是用于选择一块文本的模式,切换方法是,在Normal模式下按"v"键。进入Visual Mode之后,通过移动光标,可以选中光标所经过的区域。

用一张图来总结VIM的四种模式。

VIM Modes

在VIM中移动光标

在了解了上面几种模式之后,再来了解一下如何在VIM中移动光标。其实说白了,文本编辑就是不断的移动光标和插入文本,所以是否能高效得移动光标是一个文本编辑器成功与否的关键特性。

想要移动光标,先进入Normal模式。在Normal模式中,h, j, k, l,四个键分别代表了“左”,“下”,“上”,“右”。虽然一开始会觉得很奇怪,但使用习惯之后,用hjkl来移动光标绝对比用光标键来的高效。

当然如果只能进行上下左右四种移动,那可体现不出VIM的优势,VIM中还提供了许多能提高效率的移动方法。

  • 输入数字N,比如24,然后按<c-g>(也就是control + g组合键,下文以此类推),可以直接跳转到第N行
  • <c-f>和<c-b>就可以向前、向后翻页
  • ^键可以将光标移动至行首,$键可以将光标移动至行末
  • w键移动至下一个单词,e键移动到当前光标所在单词的最后一个字母,b键移动到当前光标所在单词的第一个字母
  • gg(按两下g)就能回到文件开头,<s-g>(shift+g)能回到文件末尾

另外在VIM的Normal模式中的命令基本上都可以通过如下办法重复多次:先输入希望重复的次数,再输入具体命令。比如我希望光标向下移动10行,就可以在Normal模式下,先输入10,再按j键。又比如希望光标向后移动5个单词,可以先输入5,然后按w。诸如此类,可以举一反三。

除此之外,VIM还提供了一些方便程序员的导航功能,比如

  • 按%键能够在匹配括号间跳转
  • 按{和}可以跳转到下一个函数和上一个函数
  • 按gd可以跳转到函数定义

还有许许多多的快捷移动方式,需要在不断的使用过程中熟悉和体会。

Copy & Paste

这年头复制粘贴简直是必须要有的功能啊~当然VIM也不会少。

为了进行复制,我们先要选中希望复制的内容,所以,首先通过Visual Mode选中需要复制的内容。记得按"v"键进入Visual Mode,然后用刚才说的移动命令选中希望复制的内容,如下图。

Visual

然后按y键,这样,选中的内容就被复制下来了。再移动光标到希望粘贴的地方,按p键,完成。

当然,Visual Mode还有其他几种方便我们选择的进入方法,比如

  • 按<s-v>,就进入了行选择模式,每次可以选中一行。
  • 按<c-v>,就进入了块选择模式,每次可以选中一个方块的内容。

这些都是很有用的选择方式,可以动手试试。

有童鞋经常会碰到这样的问题,在VIM中复制的内容,在其他程序中按Control-v并不能粘贴出来,这是因为VIM默认的Copy操作不会把复制的内容保存到OS的剪贴板中去。我们只需要在复制的时候,用("+y)三个键(一个引号,一个加号和一个y)进行操作就可以了,同样,用("+p)三个键就能把剪贴板中的内容粘贴到VIM中来。

编辑命令

除了能够输入文字,编辑文档也是很重要的功能。最常用的有两个功能:

  • 替换某个字母:将光标移动到希望替换的字母下,按r键,再输入你希望替换的字母
  • 剪切某块内容:通过Visual模式,选中希望剪切的部分,然后按x键,就能把选中的部分剪切到剪贴板中。这里有一个非常有用的技巧,有时候我们经常会把两个字母的顺序打错,比如:把refer打成了refre,我们希望把re两个字母的位置交换一下,可以先把光标移动到re中的r字符上,然后直接按"xp"两个键,re就变成er了~

Undo & Redo

今天最后一个内容是如何在VIM里面进行撤销和重做。很简单,在Normal模式下,按"u"键就是撤销,按<c-r>就是重做。

End of Episode 1

好啦,内容已经够多了,今天就先到这里,有兴趣的童鞋要装一个VIM,然后多多操练。下次继续吧~

下次的内容有:

  • Searching & Replacing
  • Mark
  • Buffers
  • Split Windows

最后附上一份经典的Cheat Sheet,对不熟悉VIM的童鞋帮助很大哦。

http://www.viemu.com/vi-vim-cheat-sheet.gif

http://www.tuxfiles.org/linuxhelp/vimcheat.html

Comments (6)

  1. 08:49, 2010-04-14任平生  / Reply

    我一直被 VIM 的繁多的命令吓到,只在正则替换的时候才用用... :sad:

  2. 08:52, 2010-04-14任平生  / Reply

    ps. 如果不是很需要 Feed 的追踪统计功能的话,还是关掉吧, feedproxy.google.com/~r/lync-in/~3/oL65ibBXwnM/ 的地址需要翻墙

  3. 09:18, 2010-04-14Chris  / Reply

    @任平生
    Windows下的VIM默认配置是支持鼠标操作+大部分Windows常用命令的~比如C-C, C-V这种。主要是界面原始了一些,吓到了很多人@@我现在基本用它替代Notepad。尝试过一段时间Notepad++,觉得还是不够强大。说到命令...Emacs的真是吓到我了,哈哈:)

  4. 17:14, 2010-04-15zhy  / Reply

    哪天进Ubuntu用VIM的时候再来看看你这文章

  5. 22:30, 2010-04-15Chris  / Reply

    @zhy
    呵呵,谢谢关注~我这篇文章也是写的比较粗略,时间比较有限,而且自己接触VIM的时间也不算特别长。有什么问题可以直接留言提问,以后还会更新新的VIM相关内容,继续关注哦

  6. 18:56, 2010-06-12Justice  / Reply

    你准备烂尾了吗 =.=

Leave a Reply

Allowed Tags - You may use these HTML tags and attributes in your comment.

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

Pingbacks (0)

› No pingbacks yet.