你想以最快的速度来学习最棒的文本编辑器 VIM ?我的建议是,你得先懂得如何在 VIM 中存活下来,然后再一点一点地学习各种戏法。
Vim the Six Billion Dollar editor
Better, Stronger, Faster.
学习 vim 并且其将会成为你使用的最后一个文本编辑器。没有比这个更好的文本编辑器了。虽然它非常地难学,但是却不可思议地好用。
我建议下面四个学习步骤:
- 存活
- 感觉良好
- 更好、更强、更快
- Vim 超能力
完成这个教程,你将会成为一个 vim 高手。
在我们开始之前,先提个醒,学习 vim 一开始会比较痛苦,比较耗费时间,学习 Vim 就像你学习一种乐器一样,不要觉得你 3 天内就可以掌握它。事实上,它至少要花费你 2 周的时间。
首先 - 存活
- 安装 vim
- 启动 vim
- 什么也别干!先阅读
当你安装好一个编辑器后,你一定会想在其中输入点什么东西,然后看看这个编辑器是什么样子。但 vim 不是这样的,请按照下面的命令操作:
- 启动 Vim 后,vim 在 Normal 模式下。
- 让我们进入 Insert 模式,请按下键 i 。(你会看到 vim 左下角有一个 –insert– 字样,表示,你可以以插入的方式输入了)
- 此时,你可以输入文本了,就像你用“记事本”一样。
- 如果你想返回 Normal 模式,请按 ESC 键。
现在,你知道如何在 Insert 和 Normal 模式下切换了。下面是一些命令,可以让你在 Normal 模式下幸存下来:
- i → Insert 模式,按 ESC 回到 Normal 模式.
- x → 删除光标所在的字符
- :wq → 存盘 + 退出 (:w 存盘, :q 退出) (:w 后可以跟文件名)
- dd → 删除(拷贝)当前行
- p → 粘贴
推荐:
- hjkl (强例推荐使用其移动光标,但不必需) →你也可以使用光标键 (←↓↑→). 注: j 就像下箭头。
- :help <command> → 显示相关命令的帮助。你也可以就输入 :help 而不跟命令。(退出帮助需要输入:q)
只有5个命令,一开始只需掌握这些,当适应了这些命令后(大概需要一天或更多的诗句),你可以转到第二层级了。
但首先,稍微回顾一下普通模式。在标准编辑器里,要复制的话你需要使用 Ctrl 键(Ctrl-c)。实际上,当你按下 Ctrl 键时,所有按键的意义都改变了。Vim 的普通模式有点类似于标准编辑器自动按下了 Ctrl 键。
最后的补充:
- 我使用 <C-λ> 代替 Ctrl-λ
- 命令后附带回车,比如我若是写 :q,我是指 :q<enter>
其次 - 感觉良好
上面的那些命令只能让你存活下来,现在是时候学习一些更多的命令了,下面是我的建议:(所有的命令都需要在 Normal 模式下使用,如果你不知道现在在什么样的模式,你就狂按几次 ESC 键)
各种插入模式
1 | a → 在光标后插入 |
基本移动命令
1 | 0 → 数字零,到行头 |
拷贝/粘贴
p/P都可以,p是表示在当前位置之后,P表示在当前位置之前
1 | P → 粘贴 |
Undo/Redo
1 | u → undo |
打开/保存/退出/改变文件(Buffer)
1 | :e <文件路径> → 打开 |
花点时间熟悉一下上面的命令,一旦你掌握他们了,你就几乎可以干其它编辑器都能干的事了。但是到现在为止,你可能觉得 vim 使用起来还是有点笨拙,不过没关系,你可以进阶到第三级了。
然后 - 更好、更强、更快
先恭喜你!你干的很不错。我们可以开始一些更为有趣的事了。在第三级,我们只谈那些和 vi 可以兼容的命令。
更好
下面,让我们看一下 vim 是怎么重复自己的:
1 | . → (小数点) 可以重复上一次的命令 |
下面是一个示例,找开一个文件你可以试试下面的命令:
1 | 2dd → 删除2行 |
更强
你要让你的光标移动更有效率,你一定要了解下面的这些命令,千万别跳过。
- NG → 到第 N 行 (注意命令中的G是大写的,另我一般使用 :N 到第N行,如 :137 到第137行)
- gg → 到第一行。(相当于1G,或 :1)
- G → 到最后一行。
- 按单词移动:
1 | w → 到下一个单词的开头。 |
下面,让我来说说最强的光标移动:
1 | % : 匹配括号移动,包括 `(`、`{`、`[` (你需要把光标先移到括号上) |
相信我,最后这三个命令对程序员来说是相当强大的。
更快
你一定要记住光标的移动,因为很多命令都可以和这些移动光标的命令连动。很多命令都可以如下来干:
1 | <start position><command><end position> |
例如 0y$ 命令意味着:
- 0 → 先到行头
- y → 从这里开始拷贝
- $ → 拷贝到本行最后一个字符
你可可以输入 ye
,从当前位置拷贝到本单词的最后一个字符。
你也可以输入 y2/foo
来拷贝2个 “foo” 之间的字符串。
还有很多时间并不一定你就一定要按y才会拷贝,下面的命令也会被拷贝:
- d (删除 )
- v (可视化的选择)
- gU (变大写)
- gu (变小写)
- 等等
备注:可视化选择是一个很有意思的命令,你可以先按 v ,然后移动光标,你就会看到文本被选择,然后,你可d,也可y,也可以变大写等
The Last - Vim 超能力
你只需要掌握前面的命令,你就可以很舒服的使用VIM了。但是,现在,我们向你介绍的是 VIM 杀手级的功能。下面这些功能是我只用 vim 的原因。
在当前行上移动光标
1 | 0 ^ $ f F t T , ; |
还有一个很有用的命令是 dt"
→ 删除所有的内容,直到遇到双引号 "
。
区域选择
<action>a<object> or <action>i<object>
区域选择只能在 visual 模式下使用,并且要跟在一个操作符之后。这些命令很强大,其命令格式为:
1 | <action>a<object> |
说明:
- action 可以是任何的命令,如 d (删除), y (拷贝), v (可以视模式选择)。
- object 可能是: w 一个单词, W 一个以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符:”、 ‘、 )、 }、 ]。
假设你有一个字符串 (map (+) (“foo”)).而光标键在第一个 o 的位置。
1 | vi" → 会选择 foo. |
块操作
<C-v>
块操作在进行多行编辑时会非常有用。
典型的块操作如下: 0 <C-v> <C-d> I-- [ESC]
1 | ^ → 到行头 |
注意:在 Windows 系统下,如果 clipboard 里面有内容(就是说你复制了),你需要使用 <C-q>
而不是 <C-v>
,<C-v>
是拷贝剪贴板。
自动提示
<C-n>
和 <C-p>
在 Insert 模式下,你可以输入一个词的开头,然后按
宏录制
qa 操作序列 q, @a, @@
- qa 把你的操作记录在寄存器 a。
- 于是 @a 会replay被录制的宏。
- @@ 是一个快捷键用来replay最新录制的宏。
示例:
在一个只有一行且这一行只有“1”的文本中,键入如下命令:
1 | qaYp<C-a>q→ |
可视化选择
v,V,<C-v>
前面,我们看到了 <C-v>
的示例 (在Windows下应该是 <C-q>
),我们可以使用 v 和 V。一但被选好了,你可以做下面的事:
J
→ 把所有的行连接起来(变成一行)<
或>
→ 左右缩进=
→ 自动缩进 (这个功能相当强大,我太喜欢了)
在可视化模式所选择的行的末尾添加一些东西:
<C-v>
- 跳到目的行 (
jjj
或者<C-d>
或者/pattern
或者%
等等…) $
跳到行末尾A
, 写入一些文本,[按]ESC
键.
分割
:split
和 vsplit
这些是很重要的命令,所以你应该用 :help split
查看下使用说明。
1 | `:split` → 创建一个水平分割窗口 ( `:vsplit` 创建一个竖直分割窗口) |
总结
这些是我经常使用的90%的命令。我建议你每天学习一到两个命令。在两到三周之后,你将会感觉到 vim 在你手上使用的是如此的强大。
学习 vim 更多的是记忆训练。值得高兴的是 vim 诞生了一些非常好的工具和优秀的文档。
当你非常熟悉大部分基本命令之后就可以使用 vimtutor 了。
另外,其在线帮助文档中你应该要仔细阅读这页 :help usr_02.txt
,你会学习到诸如 !
, 目录,寄存器,插件等很多其它的功能。
学习vim就像学弹钢琴一样,一旦学会,受益无穷。