[日期:2013-08-20] | 来源:oschina.net 作者:Lesus, Garfielt, szkiti, 耀耀 | [字体:大 中 小] |
你想尽可能快地自学 vim (为大家所熟知的最好的编辑器) 。这是我学习的方法:从细处入手然后慢慢掌握所有技巧。
Vim 六十亿美元的编辑器
设计优良,强壮,快速。
学习 vim 并把它作为你的下一个文本编辑器,据我所知没有比它更好的编辑器,学起来难但出奇的好用。
我建议你按下附 4 个步骤学习 Vim:
本课程结束时你将成为一个 vim 高手。
但在我们开始之前,先提醒一下。刚开始学习 vim 会有点痛苦,它很费时间,有点像玩乐器一样。不要指望能像其他编辑器一样花 3 天以内的时间便能很好的使用它,事实上,这肯定要花 2 周而不是 3 天。
推荐阅读:
在标准的编辑器里,写一些东西到屏幕上只需要在键盘上输入就足够了,在 Vim 中不是这样。Vim 在普通模式里,让我们转到插入模式,键入字符 i。
你应该感觉好一点了,能像在标准编辑器里输入了,回到普通模式只需按 ESC 键即可。
你现在知道了如何在插入和普通模式之间转换,下面是你在普通模式下需要记住的指令:
- i→ 插入模式。按 ESC 键返回普通模式
- x→ 删除光标所在的字符
- :wq→ 保存退出 (:w 保存,:q 退出)
- dd→ 删除 (拷贝) 当前行
- p→ 粘贴
推荐:
- hjkl (高度推荐) → 基本的光标移动 (←↓↑→), hj 按行移动。
- :help
→ 显示关于 < command > 的帮助,可以使用 help 不带 < command > 获得常规帮助。
只有 5 个命令,一开始只需掌握这些,当适应了这些命令后(大概需要一天或更多的诗句),你可以转到第二层级了。
但首先,稍回顾一下普通模式。在标准编辑器里,要复制的话你需要使用 ctrl 键(Ctrl-c)。实际上,当你按下 ctrl 键时所有的按键的意义都改变了。在 vim 普通模式下就像在 ctrl 键自动按下的情况下使用编辑器。
最后的补充:
你知道,命令是由需求所定。是时候学习更多命令了。下面这些是我的建议:
插入模式变种命令:
- a→ 在光标后插入
- o→ 在当前行之后插入新行
- O→ 在当前行之前插入新行
- cw→ 替换从光标到单词结束
基本移动命令
- 0→ 跳到第一列
- ^→ 跳到本行第一个非空字符
- $→ 跳到本行末尾
- g_→ 跳到本行最后一个非空字符
- /pattern→ 搜索 pattern
复制 / 粘贴
- P→ 在当前位置之前粘贴,记住 p 是在当前位置之前粘贴.
- yy→ 复制当前行,与 dd 和 P 命令相比更简单。
取消 / 恢复
- u→ 取消
→ 恢复
加载 / 保存 / 退出 / 修改 文件 (缓存)
- :e <文件路径>→ 打开
- :w→ 保存
- :saveas <文件路径>→ 保存到这个文件
- :x,ZZ 或者:wq→ 保存和退出 (:x 如果可能的话,只保存)
- :q!→ 退出但不保存,使用:qa!,即使在缓存中还有已经修改的也会退出。
- :bn (对比:bp) → 显示下一个 (上一个) 文件缓存
花些时间学习所有这些命令。一旦完成后,你应该就能完成在像在其它编辑器中所有事情。也许,你可能还会觉得有点笨手笨脚。但是跟着我进入下一个层次,你就会发现为什么 vim 值得你额外付出的努力。
为达到这一步表示祝贺!现在我们可以开始这有趣的东西。在第三层次,我们将只讨论命令,它兼容旧的 vi 编辑器。
更好
让我们看看 vim 是怎么帮你做重复事情的。
1. .→(点)可以重复最后一个命令,
2. N <命令> 会重复命令 N 次。
一些例子,打开一个文件然后写入下面内容:
• 2dd→ will delete 2 lines • 3p→ will paste the text 3 times • 100idesu [ESC]→ will write “desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu” •.→ Just after the last command will write again the 100 “desu”. •3.→ Will write 3 “desu” (and not 300, how clever).
更强
知道怎么有效的移动对 vim 是非常重要的。请不要跳过这一节。
1. NG→定位到第 N 行
2. gg→1G 的快捷方式 —— 定位到第一行
3. G→定位到最后一行
4. 单词移动:
1. w→定位到当前单词的开始位置,
2. e→ 定位到当前单词的最后位置。默认情况下,单词有字符和下划线组成。我们称一句话是由一组被空格符号分隔的单词组成。如果你想定位一句话,那么就用大写字符:
1. W→ 定位到当前句子的开始位置,
2. E→ 定位到当前这句话的最后位置.
现在让我们来谈谈几个非常有效率的移动:
%: Go to the corresponding(,{,[.
• *(resp.#) : go to next (resp. previous) occurrence of the word under the cursor
相信我,最后的三行命令是精华。
更快
记住了 vi 移动的重要性?这里就是原因。大多数命令使用下面这种通用格式:
<开始位置>< 命令 >< 结束位置 >
例如: 0y$ 意味着
我们也可以使用 ye,从当前位置复制到单词的末尾。但是 y2/foo 会一直复制到第二个 foo 出现的地方。
但对于 y(复制), d (删除), v (visual 选择), gU (大写), gu (小写) 等等命令都是真实的。
使用上述的命令,你就觉得很爽了。但是现在,这里才是杀手锏。正因为其中有些特性,我才使用 vim 的。
在当前行移动:0^$g_fFtT,;
一个有用的提示:dt"→删除所有的直到”。
区域选择 : <命令> a < 对象 > 或 < 命令 > i < 对象 >
这些命令仅仅能用在可视化模式的一个操作后。但是他们相当的有用。他们的主要模式有:
<命令> a < 对象 > 和 < 命令 > i < 对象 >
命令可以是任何命令,例如 , d (删除),y (拉取),v (进入可视化模式)。对象可以是: w 一个单词,W 一个单词 (扩展的),s 一个句子,p 一个段落。而且也可以是普通的字符, 例如 ",',),},]。
假设现在光标在 (map (+) ("foo")) 这个字符串的第一个 o 上。
- vi"→ 将会选择 foo
- va"→ 将会选择 "foo"
- vi)→ 将会选择 "foo"
- va)→ 将会选择 ("foo")
- v2i)→ 将会选择 map (+) ("foo")
- v2a)→ 将会选择 (map (+) ("foo"))
矩形选择块:
矩形选择块能够方便的对多行代码进行注释。 如:0
提示:如果你的剪贴板在 Windows 中是非空的话,那么你就不得不使用
实现:
在插入模式中:只要打出单词的首字母,然后按
宏命令 : qa 做的一些事,@a,@@
qa 把你的动作记录在了寄存器 a 中。然后 @a 就会将存在寄存器中的动作重现,就好像你从新打了一边。@@是将你最后一次执行的宏命令再次执行的快捷键。
事例
在只有数字 1 的一行上, 像这样键入命令:
- qaYp
q→
- qa 开始记录。
- Yp 记录这一行。
增加数字大小。 - q 停止记录。
- @a→ 在 1 下面写 2
- @@→ 在 2 下面写 3
- 现在键入 100@@ 就将会产生一个到 103 的自增列。
可视化模式选择: v, V,
我们已经看到过
在可视化模式所选择的行的末尾添加一些东西:
分割:: split 和 vsplit
这些是很重要的命令,所以你应该在:help split 看看。
- :split→ 创建一个水平分割窗口 t (:vsplit 创建一个竖直分割窗口)
: dir 是 hjklor←↓↑→中任何一个。用来切换分割窗口。 _(对比 < C-w>|) : 用来最大化水平(竖直)分割窗口的大小 +(对比 < C-w>-) : 增加 (减小) 分割窗口
这些是我经常使用的 90% 的命令。我建议你每天学习一到两个命令。在两到三周之后,你将会感觉到 vim 在你手上使用的是如此的强大。
学习 vim 更多的是记忆训练。值得高兴的是 vim 诞生了一些非常好的工具和优秀的文档。当你非常熟悉大部分基本命令之后就可以使用 vimtutor 了。另外,你应该仔细的阅读这页 ::help usr_02.txt.
然后,你要去学习了解寄存器,插件已经其它的功能。学习 vim 就像学钢琴一样,所有的都要掌握好。