WebDigg

简明 Vim 练级攻略

作者: 陈皓
发布日期: 2011年09月07日

vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的。下面的文章翻译自《Learn Vim Progressively》,我觉得这是给新手最好的VIM的升级教程了,没有列举所有的命令,只是列举了那些最有用的命令。非常不错。

——————————正文开始——————————

你想以最快的速度学习人类史上最好的文本编辑器VIM吗?你先得懂得如何在VIM幸存下来,然后一点一点地学习各种戏法。

Vim the Six Billion Dollar editor

Better, Stronger, Faster.

学习 vim 并且其会成为你最后一个使用的文本编辑器。没有比这个更好的文本编辑器了,非常地难学,但是却不可思议地好用。

我建议下面这四个步骤:

  1. 存活
  2. 感觉良好
  3. 觉得更好,更强,更快
  4. 使用VIM的超能力

当你走完这篇文章,你会成为一个vim的 superstar。

在开始学习以前,我需要给你一些警告:

第一级 – 存活

  1. 安装 vim
  2. 启动 vim
  3. 什么也别干! 请先阅读

当你安装好一个编辑器后,你一定会想在其中输入点什么东西,然后看看这个编辑器是什么样子。但vim不是这样的,请按照下面的命令操作:

现在,你知道如何在 InsertNormal 模式下切换了。下面是一些命令,可以让你在 Normal 模式下幸存下来:

推荐 :

你能在vim幸存下来只需要上述的那5个命令,你就可以编辑文本了,你一定要把这些命令练成一种下意识的状态。于是你就可以开始进阶到第二级了。

当是,在你进入第二级时,需要再说一下 Normal 模式。在一般的编辑器下,当你需要copy一段文字的时候,你需要使用 Ctrl 键,比如:Ctrl-C。也就是说,Ctrl键就好像功能键一样,当你按下了功能键Ctrl后,C就不在是C了,而且就是一个命令或是一个快键键了, 在VIM的Normal模式下,所有的键就是功能键了 。这个你需要知道。

标记:

第二级 – 感觉良好

上面的那些命令只能让你存活下来,现在是时候学习一些更多的命令了,下面是我的建议:(陈皓注:所有的命令都需要在Normal模式下使用,如果你不知道现在在什么样的模式,你就狂按几次ESC键)

  1. 各种插入模式
* `a` → 在光标后插入
* `o` → 在当前行后插入一个新行
* `O` → 在当前行前插入一个新行
* `cw` → 替换从光标所在位置后到一个单词结尾的字符
  1. 简单的移动光标
* `0` → 数字零,到行头
* `^` → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
* `$` → 到本行行尾
* `g_` → 到本行最后一个不是blank字符的位置。
* `/pattern` → 搜索 `pattern` 的字符串(陈皓注:如果搜索出多个匹配,可按n键到下一个)
  1. 拷贝/粘贴 (陈皓注:p/P都可以,p是表示在当前位置之后,P表示在当前位置之前)
* `P` → 粘贴
* `yy` → 拷贝当前行当行于 `ddP`
  1. Undo/Redo
* `u` → undo
* `<C-r>` → redo
  1. 打开/保存/退出/改变文件 (Buffer)
* `:e <path/to/file>` → 打开一个文件
* `:w` → 存盘
* `:saveas <path/to/file>` → 另存为 `<path/to/file>`
* `:x`, `ZZ` 或 `:wq` → 保存并退出 \(`:x` 表示仅在需要时保存,ZZ不需要输入冒号并回车\)
* `:q!` → 退出不保存 `:qa!` 强行退出所有的正在编辑的文件,就算别的文件有更改。
* `:bn` 和 `:bp` → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件)

花点时间熟悉一下上面的命令,一旦你掌握他们了,你就几乎可以干其它编辑器都能干的事了。但是到现在为止,你还是觉得使用vim还是有点笨拙,不过没关系,你可以进阶到第三级了。

第三级 – 更好,更强,更快

先恭喜你!你干的很不错。我们可以开始一些更为有趣的事了。在第三级,我们只谈那些和vi可以兼容的命令。

更好

下面,让我们看一下vim是怎么重复自己的:

  1. . → (小数点) 可以重复上一次的命令
  2. N → 重复某个命令N次

下面是一个示例,找开一个文件你可以试试下面的命令:

更强

你要让你的光标移动更有效率,你一定要了解下面的这些命令, 千万别跳过

  1. NG → 到第 N 行 (陈皓注:注意命令中的G是大写的,另我一般使用 : N 到第N行,如 :137 到第137行)
  2. gg → 到第一行。(陈皓注:相当于1G,或 :1)
  3. G → 到最后一行。
  4. 按单词移动:
1. `w` → 到下一个单词的开头。
2. `e` → 到下一个单词的结尾。

如果你认为单词是由默认方式,那么就用小写的e和w。默认上来说,一个单词由字母,数字和下划线组成(陈皓注:程序变量)

如果你认为单词是由blank字符分隔符,那么你需要使用大写的E和W。(陈皓注:程序语句)

image

下面,让我来说说最强的光标移动:

相信我,上面这三个命令对程序员来说是相当强大的。

更快

你一定要记住光标的移动,因为很多命令都可以和这些移动光标的命令连动。很多命令都可以如下来干:

<start position><command><end position>

例如 0y$ 命令意味着:

你可可以输入 ye,从当前位置拷贝到本单词的最后一个字符。

你也可以输入 y2/foo 来拷贝2个 “foo” 之间的字符串。

还有很多时间并不一定你就一定要按y才会拷贝,下面的命令也会被拷贝:

(陈皓注:可视化选择是一个很有意思的命令,你可以先按v,然后移动光标,你就会看到文本被选择,然后,你可能d,也可y,也可以变大写等)

第四级 – Vim 超能力

你只需要掌握前面的命令,你就可以很舒服的使用VIM了。但是,现在,我们向你介绍的是VIM杀手级的功能。下面这些功能是我只用vim的原因。

在当前行上移动光标: 0 ^ $ f F t T , ;

image

还有一个很有用的命令是 dt" → 删除所有的内容,直到遇到双引号—— "。

区域选择 <action>a<object><action>i<object>

在visual 模式下,这些命令很强大,其命令格式为

<action>a<object><action>i<object>

假设你有一个字符串 (map (+) ("foo")).而光标键在第一个 o 的位置。

image

块操作: <C-v>

块操作,典型的操作: 0 <C-v> <C-d> I-- [ESC]

image

在Windows下的vim,你需要使用 <C-q> 而不是 <C-v><C-v> 是拷贝剪贴板。

自动提示: <C-n><C-p>

在 Insert 模式下,你可以输入一个词的开头,然后按 <C-p>或是<C-n>,自动补齐功能就出现了……

`` image

宏录制: qa 操作序列 q, @a, @@

示例

在一个只有一行且这一行只有“1”的文本中,键入如下命令:

image

可视化选择: v,V,<C-v>

前面,我们看到了 <C-v>的示例 (在Windows下应该是),我们可以使用 `v` 和 `V`。一但被选好了,你可以做下面的事:

image

在所有被选择的行后加上点东西:

image

分屏: :splitvsplit.

下面是主要的命令,你可以使用VIM的帮助 :help split. 你可以参考本站以前的一篇文章VIM分屏

image

结束语

学习vim就像学弹钢琴一样,一旦学会,受益无穷。

——————————正文结束——————————

对于vi/vim只是点评一点:这是一个你不需要使用鼠标,不需使用小键盘,只需要使用大键盘就可以完成很多复杂功能文本编辑的编辑器。不然,Visual Studio也不就会有vim的插件了

(全文完)