高效率编辑器 VIM-操作篇,非常适合 VIM 新手

虽然从很久前就开始用 VIM 了,但一直都是半吊子,翻来覆去只用自己会的命令。最近为了提高书写代码的效率,还有 coding 时候的乐趣,又重新钻研了一下 VIM,发现了一篇很好的 VIM 入门的文章,原文是英文版的,我觉得非常适合 VIM 使用入门,所以翻译了过来。这里是简单的介绍了 VIM 的操作方式,并没有说为什么要用 VIM,如果你想知道答案可以去 Google,VIM 被誉为编辑器之神。

这篇教程写了在不同工作模式下使用 VIM 的一些基本技巧——即插入模式(insert mode), 命令模式(command mode), 存取文件等。目的是帮助刚刚接触 VIM 的新手更加有效率的使用这个出色的编辑器。

说明:在这篇文章里面,<C-X> 代表 Ctrl + X——就是按住 Ctrl 键然后再按 X。而且你可以在很多情况下使用 :help command 来获得大部分命令的帮助,这个是 VIM 的内部帮助文件命令。

高效率移动

在插入模式之外

基本上来说,你应该尽可能少的呆在插入模式里面,因为在插入模式里面 VIM 就像一个“哑巴”编辑器一样。很多新手都会一直呆在插入模式里面,因为这样易于使用。但 VIM 的强大之处在于他的命令行模式!你会发现,在你越来越了解 VIM 之后,你就会花越来越少的时间使用插入模式了。

使用 h、j、k、l

使用 VIM 高效率编辑的第一步,就是放弃使用箭头键。使用 VIM,你就不用频繁的在箭头键和字母键之间移来移去了,这会节省你很多时间。当你在命令模式时,你可以用 h、j、k、l 来分别实现左、下、上、右箭头的功能。一开始可能需要适应一下,但一旦习惯这种方式,你就会发现这样操作的高效之处了。

在你编辑你的电子邮件或者其他有段落的文本时,你可能会发现使用方向键和你预期的效果不一样,有时候可能会一次跳过了很多行。这是因为你的段落在 VIM 看来是一个大的长长的行。这时你可以在按 h、j、k 或者 l 之前键入一个 g,这样 VIM 就会按屏幕上面的行如你所愿的移动了。

在当前行里面有效的移动光标

很多编辑器只提供了简单的命令来控制光标的移动(比如左、上、右、下、到行首/尾等)。VIM 则提供了很多强大的命令来满足你控制光标的欲望。当光标从一点移动到另外一点,在这两点之间的文本(包括这两个点)称作被“跨过”,这里的命令也被称作是 motion。(简单说明一下,后面会用到这个重要的概念)

这里是常用到的一些命令(motion):

  • fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,而且你可以使用 ; 来重复你的上一个 f 命令。
  • tx:和上面的命令类似,但是是移动到 x 的左边一个位置。(这真的很有用)
  • Fx:和 fx 类似,不过是往回找。
  • w:光标往前移动一个词。
  • b:光标往后移动一个词。
  • 0:移动光标到当前行首。
  • ^:移动光标到当前行的第一个字母位置。
  • $:移动光标到行尾。
  • ):移动光标到下一个句子。
  • ( :移动光标到上一个句子。

在整个文件里面有效移动光标

VIM 有很多命令,可以用来到达文件里面你想到达的地方。下面是一些在文件里面移动的命令:

  • <C-F>:向下移动一屏。
  • <C-B>:向上移动一屏。
  • G:到文件尾
  • numG:移动光标到指定的行(num)。(比如 10G 就是到第 10 行)
  • gg:到文件首
  • H:移动光标到屏幕上面
  • M:移动光标到屏幕中间
  • L:移动光标到屏幕下面
  • *:读取光标处的字符串,并且移动光标到它再次出现的地方。
  • #:和上面的类似,但是是往反方向寻找。
  • /text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n。
  • ?text:和上面类似,但是是反方向。
  • ma:在当前光标的位置标记一个书签,名字为 a。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。
  • `a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。
  • `.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。

高效的输入

使用关键词自动完成

VIM 有一个非常漂亮的关键词自动完成系统。这表示,你可以输入一个长词的一部分,然后按一下某个键,然后 VIM 就替你完成了这个长词的输入了。举个例子:你有一个变量名为 iAmALongAndAwkwardVarName 在你写的代码的某个地方。也许你不想每回都自己一个一个字母的去输入它。

使用关键词自动完成功能,你只需要输入开始几个字母(比如 iAmAL),然后按 <C-N>(按住 Ctrl,再按 N)或者 <C-P>。如果 VIM 没有给出你想要的词,继续按,直到你满意为止,VIM 会一直循环它找到的匹配的字符串。

聪明的进入插入模式

很多新手进入插入模式都只是用 i。这样当然可以进入插入模式,但通常不是那么合适,因为 VIM 提供了很多进入插入模式的命令。下面是最常用的一些:

  • i:在当前字符的左边插入
  • I:在当前行首插入
  • a:在当前字符的右边插入
  • A:在当前行尾插入
  • o:在当前行下面插入一个新行
  • O:在当前行上面插入一个新行
  • c{motion}:删除 motion 命令跨过的字符,并且进入插入模式。比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。
  • d{motion}:和上面差不多,但是不进入插入模式。

Pages: 1 2

Read More:

38 Comments

  1. 1 jianyu Commented @ 2007-01-27 15:46Reply to this comment

    建议使用vimtutor学习vim,提供了联机的教程,可以直接进行操作练习,非常直观

  2. 2 today Commented @ 2007-01-27 20:44Reply to this comment

    半调子 不对,应该是 半吊子 另:其实我的mail是 today.xa#gmail+com

  3. 3 Toy Commented @ 2007-01-27 21:02Reply to this comment

    @today:谢谢你的纠正。

  4. 4 Jay Commented @ 2007-01-27 22:00Reply to this comment

    居然打错了~~ 我回家补语文去。。。

  5. 5 Think in Read » links for 2007-01-28 Pingbacked @ 2007-01-28 9:22Reply to this comment

    [...] LinuxTOY » 高效率编辑器 VIM-操作篇,非常适合 VIM 新手 (tags: vim) [...]

  6. 6 cottage Commented @ 2007-01-28 19:35Reply to this comment

    好文!

  7. 7 albertleemon Commented @ 2007-01-29 10:15Reply to this comment

    toy,你好. 似乎上面有几个指令在gvim中无法实现.请问windows平台下gvim版本和vim指令是完全通用的吗?

  8. 8 lgn21st Commented @ 2007-01-29 11:08Reply to this comment

    在Ubuntu上apt了vim-gnome 但碰到一个问题,如果文本文件是中文文件名,双击打开无法正确显示 但从终端下用 $gvim 中文文本文件名 却可以正常工作,虽然使用上没有什么问题,但还是不方便

  9. 9 BC Commented @ 2007-01-29 11:10Reply to this comment

    强文

  10. 10 Toy Commented @ 2007-01-29 22:53Reply to this comment

    @albertleemon:我没有过在 Windows 中使用 VIM 的经验,所以不确定你的疑问是否真的存在,抱歉。也许,你可以从 VIM 手册中找到平台、版本间的差别。

  11. 11 Adam Commented @ 2007-02-28 9:14Reply to this comment

    ... w:光标往前移动一个词。 b:光标往后移动一个词。 ...

    这个地方好像没有写对吧。b应该是往前一个单词,w是往后一个单词。 我用的是version 6.3.71

  12. 12 Adam Commented @ 2007-02-28 9:19Reply to this comment

    w Move the cursor forward by a word. b Move the cursor backward by a word.

    看了原文突然想起来,这个向前向后其实不同的人应该理解不一样哈。其实方向都是一样的。真不好意思哈

  13. 13 nany Commented @ 2007-03-14 11:16Reply to this comment

    很有益处,谢谢

  14. 14 chaos Commented @ 2007-03-15 10:52Reply to this comment

    gvim 双击中文文件的使用方法:

    find / | grep gvim.desktop

    用编辑器打开, 其中的EXEC的内容是gvim -f %U 就是因为有这个%U所以直接点击打开中文文件的时候文件名解析不对。 去掉。 另外-f会对latex-vim套件有影响,只可以编译(ll),不可以预览(lv),去掉以后就行了。

  15. 15 thword Commented @ 2007-06-06 13:10Reply to this comment

    w Move the cursor forward by a word.

    b Move the cursor backward by a word.

    个人以为这里翻译成“向后移动”和“向左移动”比“前”和“后”更容易理解。

    在全文搜索时,这两个单词则可翻译为“下”和“上”。

  16. 16 cyy Commented @ 2007-06-15 13:28Reply to this comment

    It 's really helpful. Thank you so much. ^_^

  17. 17 cekavu Commented @ 2007-09-12 10:51Reply to this comment

    Really helpful! Love vim now! Thanks!^_^

  18. 18 wupian无骗博客 » Blog Archive » 基于linux终端的常用工具 Pingbacked @ 2007-12-13 15:01Reply to this comment

    [...] 文本编辑:既然已经有了 VIM、Emacs,那么我们还奢求什么呢? [...]

  19. 19 yegle Commented @ 2007-12-19 19:02Reply to this comment

    问下,这篇日志的分页功能是如何实现的?就是日志下的page 1 2

  20. 20 Toy Commented @ 2007-12-19 19:26Reply to this comment

    @yegle: WP 内置的,在编辑文章时插入 <!--nextpage--> 即可。

  21. 21 yegle Commented @ 2007-12-20 10:45Reply to this comment

    @toy thx,没怎么细细研究wp……

  22. 22 Ggarlic’s » Blog Archive » linuxtoy评选的2007最受读者欢迎的文章 Pingbacked @ 2008-01-05 0:44Reply to this comment

    [...] 高效率编辑器 VIM这篇教程写了在不同工作模式下使用 VIM 的一些基本技巧——即插入模式(insert mode), 命令模式(command mode), 存取文件等。目的是帮助刚刚接触 VIM 的新手更加有效率的使用这个出色的编辑器。 [...]

  23. 23 Wu Yin Commented @ 2008-01-16 14:36Reply to this comment

    手把手教你把Vim改装成一个IDE编程环境(图文) http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx

  24. 24 lzhan Commented @ 2008-01-21 7:45Reply to this comment

    如果使用/text来搜索text,可以用大写的N来往前搜索。

  25. 25 Ext3 Commented @ 2008-02-04 14:25Reply to this comment

    你好,这篇文章已经收藏到我的博客里。 欢迎光临:http://hi.baidu.com/ext3/

  26. 26 mcooldog Commented @ 2008-02-08 22:41Reply to this comment

    你好,你的文章我转走了。 http://mcooldog.blog.ubuntu.org.cn/

  27. 27 links for 2008-02-27 « Iveney’s Weblog Pingbacked @ 2008-02-27 23:19Reply to this comment

    [...] 高效率编辑器 VIM-操作篇,非常适合 VIM 新手 — LinuxTOY (tags: vim tutor linux tips tutorial guide) [...]

  28. 28 flytwokites Commented @ 2008-03-08 2:33Reply to this comment

    好文,我也转。 http://www.ken1ken.com/user/flytwokites/

  29. 29 Jax Commented @ 2008-03-19 11:24Reply to this comment

    Thanks very much. This article really helps!

  30. 30 高效率编辑器 VIM-操作篇 at 备忘库-冷 Pingbacked @ 2008-04-15 9:11Reply to this comment

    [...] 转载自:http://linuxtoy.org/archives/efficient-editing-with-vim.html [...]

  31. 31 icedig Commented @ 2008-04-23 9:24Reply to this comment

    @albertleemon 我的xp下的gvim7.1可实现上述全部功能

  32. 32 【转载】高效率编辑器 VIM-操作篇,非常适合 VIM 新手 Pingbacked @ 2008-05-03 5:48Reply to this comment

    [...] Toy Posted in Tutorials , Text Editor , Featured Post RSS Trackback 虽然从很久前就开始用 VIM [...]

  33. 33 继TC之后,又用上了Vim(GVim) | fangyi's blog Pingbacked @ 2008-08-25 20:50Reply to this comment

    [...] 附:常用到的一些命令(motion):(来自于高效率编辑器 VIM-操作篇,非常适合 VIM 新手) [...]

  34. 34 cylinc Commented @ 2008-11-16 19:45Reply to this comment

    虽然一直有用VIM,但好久没有好好的深入学习了,发现效率要提高很多,谢了。

  35. 35 z.Yleo77 Commented @ 2009-01-06 16:48Reply to this comment

    慢慢琢磨,, 试手中。

  36. 36 Sean Ma Commented @ 2009-01-15 15:50Reply to this comment

    Great! Thanks for inspiration. I created vimim —— vim 中文输入法 http://maxiangjiang.googlepages.com/vimim.html

  37. 37 thysky Commented @ 2009-03-10 22:51Reply to this comment

    好文!

  38. 38 reeze Commented @ 2009-11-22 12:20Reply to this comment

    这个就是 :help 的中文版吧:)