Vim 教程

你想以最快的方式教自己 vim(人类已知的最好的文本编辑器)。以下这是我的方式,你从学习最小技能开始,然后慢慢整合所有技巧。

学习vim,它将是你的最后一个文本编辑器。我所知道的没有比它更好的文本编辑器。它很难学,但使用起来却令人难以置信。

我建议你用 4 个步骤自学 Vim:

  1. 生存
  2. 感觉舒服
  3. 感觉更好,更强,更快
  4. 使用 vim 的超能力

到这个旅程结束时,你将成为一个超级巨星。

但在我们开始之前,先给一个警告。学习 vim 起初会很痛苦。需要花时间。这很像演奏乐器,不要期望在不到 3 天的时间内使用 vim 比使用其他编辑器更高效。事实上它肯定需要 2 周而不是 3 天。

第 1 级 - 生存

  1. 安装vim
  2. 启动 vim
  3. 没做什么!读。

在标准编辑器中,在键盘上键入足以编写内容并在屏幕上看到它。这次不行。Vim 处于普通模式。我们进入插入模式。输入字母 i

你应该感觉好一点。你可以在标准编辑器中键入字母。要返回普通模式,只需 ESC 按键即可。

你现在知道如何在插入普通模式之间切换。现在,以下是在普通模式下生存所需的命令:

  • i插入模式。键入 ESC 以返回正常模式。
  • x →删除光标下的字符
  • :wq→保存并退出(:w 保存,:q 退出)
  • dd →删除(并复制)当前行
  • p →粘贴

推荐的:

  • hjkl(强烈推荐但不是强制性的)→基本光标移动(←↓↑→)。提示:j 看起来像向下箭头。
  • :help <command>→显示帮助 <command>。你可以在 :help 没有 a 的情况下使用 <command> 获得一般帮助。

只有 5 个命令。这就是你开始所需要的一切。一旦这些命令开始变得自然(可能在一天左右之后),你应该继续前进到第 2 级。

但首先,说一下关于普通模式的一点评论。在标准编辑器中,要复制,你必须使用Ctrl键(通常是Ctrl+C)。事实上,当你按下Ctrl时,就好像所有的键都改变了意义。在正常模式下使用 vim 有点像让编辑器自动按下Ctrl你的键。

关于符号的最后一句话:

  • 我不写 Ctrl-λ,二十写 <C-λ>
  • 命令以 : 开,以 <enter> 结尾。例如,当我写 :q 时,我的意思是 :q<enter>

第 2 级 - 感觉舒服

你知道生存所需的命令。是时候学习更多命令了。这些是我的建议:

1. 插入模式变化:

  • a →在光标后插入
  • o →在当前行之后插入一个新行
  • O →在当前行之前插入新行
  • cw →将光标替换为单词的结尾

2. 基本动作

  • 0 →转到第一列
  • ^ →转到该行的第一个非空白字符
  • $ →到最后一行
  • g_ →转到行的最后一个非空白字符
  • /pattern →搜索 pattern

3. 复制/粘贴

  • P→粘贴之前,记住 p 是在当前位置后粘贴。
  • yy →复制当前行,更容易但相当于 ddP

4. 撤销/重做

  • u →撤消
  • <C-r> →重做

5. 加载/保存/退出/更改文件(缓冲区)

  • :e <path/to/file> →打开
  • :w →保存
  • :saveas <path/to/file> →保存到 <path/to/file>
  • :xZZ:wq→保存并退出(:x 仅在必要时保存)
  • :q!→退出而不保存,还::qa! 即使存在已修改的隐藏缓冲区也要退出。
  • :bn(分别 :bp)→显示下一个(相应的前一个)文件(缓冲区)

花点时间学习所有这些命令。完成后,你应该能够完成其他编辑器中可以执行的所有操作。你可能仍觉得有点尴尬不是那么舒服。但请跟我到下一级,你会明白为什么 vim 值得去学习,去做更多的工作。

第三级 - 更好、更强、更快

祝贺你走到这一步!现在我们可以从有趣的东西开始。在第 3 级,我们只讨论与旧的 vi 编辑器兼容的命令。

更好

让我们来看看 vim 如何帮助你重复自己:

  1. . →(点)将重复最后一个命令,
  2. N →将重复命令 N 次。

一些例子,打开一个文件并输入:

  • 2dd →将删除 2 行
  • 3p →将文本粘贴 3 次
  • 100ilove [ESC] →会写“love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love love“
  • . →刚过最后一个命令将再次写入 100 次 love
  • 3. →会写 3 次 love (而不是 300,多么聪明)。

更强

知道如何用 vim 有效地移动是非常重要的。不要跳过本节。

  1. N G→转到第 N 行

  2. gg→快捷方式 1G-转到文件的开始

  3. G →转到最后一行

  4. 单词移动:

  1. w →转到下一个单词的开头,
  2. e →转到这个词的结尾。

默认情况下,单词由字母和下划线字符组成。我们将一个由空白字符分隔的字母组称为 WORD。如果你想考虑 WORDS,那么只需使用大写字符:

  1. W →转到以下 WORD 的开头,
  2. E →到这个词的结尾。

Word 移动的例子

现在让我们谈谈非常有效的举措:

  • %:转到相应的 ({[
  • *(resp。#):转到光标下单词的下一个(相应的前一个)出现

相信我,最后三个命令是黄金。

更快

还记得 vi 移动的重要性吗?这就是原因。大多数命令可以使用以下通用格式:

<start position><command><end position>

例如:0y$ 手段

  • 0 →转到此行的开头
  • y →从这里猛拉
  • $ →直到这一行的结尾

我们也可以做这样的事情 ye,从这里开始到结尾。但也是 y2/foo 第二次出现 foo

但是 y(yank)的真实情况也适用于 d(删除),v(视觉选择),gU(大写),gu(小写)等…

第 4 级 - Vim 超能力

使用所有前面的命令,你应该习惯使用 vim。但现在,这里有杀手级的功能。其中一些功能是我开始使用 vim 的原因。

移动当前行: 0 ^ ###g_fFtT,;`

  • 0 →转到第 0 列

  • ^ →转到第一个字符

  • $ →转到最后一栏

  • g_ →转到该行的最后一个字符

  • fa→转到下一次出现的字母 a,(相应 ;)将找到下一个(相应的前一个)发生。

  • t,→转到角色前面 ,

  • 3fa→找到 a 此行的第 3 次出现。

  • FT→像 ft 但是向后移动

行移动

一个有用的提示是:dt"→删除所有内容,直到 "

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

这些命令只能在操作模式处于可视模式后使用。但它们非常强大。他们的主要模式是:

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

动作可以是任何动作,例如 d(删除),y(拷贝),v(在可视模式下选择)。对象可以是:w 单词,WWORD(扩展单词),s 句子,p 段落。而且,自然字符也可以,比如 "')}]

假设光标在第一个 o(map (+) ("foo"))

  • vi"→将选择 foo
  • va"→将选择 foo
  • vi)→将选择 foo
  • va)→将选择 ("foo")
  • v2i) →将选择 map (+) ("foo")
  • v2a) →将选择 (map (+) ("foo"))

文本对象选择

选择矩形块:<C-v>

矩形块对于注释许多代码行非常有用。典型例子如 0<C-v><C-d>I-- [ESC]

  • ^ →转到该行的第一个非空白字符
  • <C-v> →开始块选择
  • <C-d>→向下移动(也可能是 jjj%,等…)
  • I-- [ESC]→写下 -- 评论每一行

矩形块

注意:在 Windows 中,你可能必须使用 <C-q> 而不是 <C-v> 假如剪贴板不为空的话。

完成:<C-n><C-p>

在插入模式下,只需键入单词的开头,然后输入 <C-p>,魔力就会显现…

完成

宏:qa 做一些事情 q@a@@

qa记录 a 中记录你的行为。然后 @a 将重放保存到寄存器中的宏 a,就像你键入它一样。@@ 是重放上次执行的宏的快捷方式。

在仅包含数字 1 的行上,键入以下内容:

  • qaYp<C-a>q → - qa 开始记录。 - Yp 复制这一行。 - <C-a> 增加数量。 - q 停止记录 - @a →在 1 下写 2 - @@ →在 2 下写 3 - 现在,100@@ 将创建一个递增数字直到 103 的列表。

宏

视觉选择:vV<C-v>

我们看到了一个例子 <C-v>。还有 vV。选择完成后,你可以:

  • J →将所有行连接在一起。
  • <(或 >)→向左缩进(或向右缩进)。
  • = →自动缩进

自动缩进

在所有视觉选择的行的末尾添加一些内容:

  • <C-v>
  • 去到想要的行(jjj<C-d>/pattern% 等…)
  • $ 到行的末尾
  • A,写文字,ESC

附加到许多行

拆分::splitvsplit

这些是最重要的命令,但你应该看一下 :help split

  • :split→创建拆分(:vsplit 创建垂直拆分)
  • <C-w><dir>:其中 dir 是任何 hjkl 或←↓↑→改变分裂。
  • <C-w>_(分别 <C-w>|):最大化分割的大小(分别为垂直分割)
  • <C-w>+(分别 <C-w>-):成长(分别缩小)分裂

分割

结论

这是我每天使用的命令中的 90%。我建议你每天学习不超过一两个新命令。两到三周后,你会开始感受到 vim 的力量在你手中。

学习 Vim 更多的是训练而不是简单的记忆。幸运的是,vim 带有一些非常好的工具和优秀的文档。运行 vimtutor 直到你熟悉大多数基本命令。

然后,你将了解 !,折叠,注册,插件和许多其他功能。像学习钢琴一样学习 vim,一切都应该没问题。