#             欢   迎   来   到   VIM   教   程

#                       第   一   章

Vim 是一个功能非常强大的编辑器，有很多命令，多得没法在这样的教程里全部讲完。
本教程旨在介绍足够多的命令，让你能轻松把 Vim 当作通用编辑器使用。
**重要提示**：请记住，本教程是通过实际操作来教学的。这意味着你需要做练习才能正
确掌握。如果只是阅读文字，很快你就会忘记最重要的部分！

现在，请确保你的大写锁定键**没有**被按下，然后多次按 j 键，移动光标，直到 “第 0 课”
完全填满屏幕。

# 第 0 课

注意：课程中的命令会修改文本，但这些改动**不会**被保存。不用担心搞乱内容；只需记住，
按 [<Esc>](<Esc>) 然后按 [u](u) 可以撤销最新的修改。

本教程是交互式的，有几件事你需要知道：
- 在[像这样的链接](holy-grail)上按 [<Enter>](<Enter>) 可以打开链接的帮助部分。
- 或者直接在任何一个单词上按 [K](K) 来查找它的文档！
- 有时会要求你修改
这样的文本。
当你正确完成更改，左侧的 ✗ 标志会变成 ✓。我想你已经能感觉到 Vim 有多棒了。;)
其他时候，系统会提示你运行一个命令（稍后会解释）：
~~~ cmd
    :help <Enter>
~~~
或者按一系列键
~~~ normal
    <Esc>0f<Space>d3wP$P
~~~

在 < 和 > 之间的文本（比如 `<Enter>`{normal}）描述的是需要按下的键，而不是要输入的文本。

现在，移动到下一课（用 `j`{normal} 键向下滚动）。

# 第 1.1 课：移动光标

** 要移动光标，请按照指示按 `h`、`j`、`k`、`l` 键。 **

         ↑
         k          提示：`h`{normal} 键在左边，向左移动。
     ← h   l →            `l`{normal} 键在右边，向右移动。
         j                `j`{normal} 键看起来像一个向下的箭头。
         ↓

  1. 在屏幕上随意移动光标，直到你感觉熟练为止。

  2. 按住向下键（`j`{normal}），直到它开始重复移动。
     现在你知道如何进入下一课了。

  3. 使用向下键，移动到第 1.2 课。

注意：如果你不确定自己输入了什么，按 <Esc> 进入普通模式。然后重新输入你想输入的
      命令。

注意：方向键也应该能用。但是一旦你习惯了使用 hjkl，你就能移动得更快。真的！

# 第 1.2 课：退出 Vim

！！注意：在执行下面的任何步骤之前，请先阅读完整课内容！！

 1. 按 <Esc> 键（以确保你处于普通模式）。

 2. 输入：

    `:q!`{vim} `<Enter>`{normal}.

     这会退出编辑器，并**丢弃**你所做的任何更改。

 3. 打开 vim，并通过执行将你带入此教程的命令回到这里。那可能是：

     :Tutor <Enter>

 4. 如果你记住了这些步骤并且有信心，请执行步骤 1 到 3 来退出并重新进入编辑器。

注意：[:q!](:q) <Enter> 会丢弃你所做的任何更改。在后面的课程中，你将学习如何将
      更改保存到文件。

 5. 将光标向下移动到第 1.3 课。

# 第 1.3 课：文本编辑 - 删除

** 按 `x`{normal} 删除光标下的字符。 **

 1. 将光标移动到下面标记为 ✗ 的那一行。

 2. 要修正错误，移动光标直到它位于要删除的字符上。

 3. 按 [x 键](x) 删除不需要的字符。

 4. 重复步骤 2 到 4，直到句子正确为止。

The ccow jumpedd ovverr thhe mooon.

 5. 现在这一行已经正确，继续第 1.4 课。

注意：在学习本教程时，不要试图死记硬背，要通过使用来学习。

# 第 1.4 课：文本编辑：插入

** 按 `i`{normal} 来插入文本。 **

 1. 将光标移动到下面标记为 ✗ 的第一行。

 2. 为了使第一行与第二行相同，将光标移动到要插入文本的位置之后的**第一个字符**上。

 3. 按 `i`{normal} 并输入必要的添加内容。

 4. 每修正一个错误后，按 `<Esc>`{normal} 返回普通模式。重复步骤 2 到 4 来纠正句子。

There is text misng this .
There is some text missing from this line.

 5. 当你熟悉插入文本后，移动到第 1.5 课。

# 第 1.5 课：文本编辑：追加

** 按 `A`{normal} 来追加文本。 **

 1. 将光标移动到下面标记为 ✗ 的第一行。光标在该行的哪个字符上并不重要。

 2. 按 [A](A) 并输入必要的添加内容。

 3. 文本追加完成后，按 `<Esc>`{normal} 返回普通模式。

 4. 将光标移动到第二个标记为 ✗ 的行，重复步骤 2 和 3 来纠正这个句子。

There is some text missing from th
There is some text missing from this line.
There is also some text miss
There is also some text missing here.

 5. 当你熟悉追加文本后，移动到第 1.6 课。

# 第 1.6 课：编辑文件

** 使用 `:wq`{vim} 来保存文件并退出。 **

！！注意：在执行下面的任何步骤之前，请先阅读完整课内容！！

 1. 像在第 1.2 课中那样退出本教程：`:q!`{vim}
    或者，如果你可以访问另一个终端，请在那里进行以下操作。

 2. 在 shell 提示符下输入以下命令：
~~~ sh
     $ vim tutor
~~~
    'vim' 是启动 Vim 编辑器的命令，'tutor' 是你希望编辑的文件名。使用一个可以更
    改的文件。

 3. 按照前面课程所学插入和删除文本。

 4. 保存更改并退出 Vim：
~~~ cmd
     :wq
~~~

    注意，你需要按 `<Enter>` 来执行命令。

 5. 如果你在步骤 1 中退出了 vimtutor，请重新启动 vimtutor 并向下移动到以下总结
    部分。

 6. 阅读并理解上述步骤后：动手做吧。

# 第 1 课总结

 1. 要移动光标，可以使用方向键或 hjkl 键。
     h (left)   j (down)       k (up)       l (right)

 2. 要从 shell 提示符启动 Vim，输入：
~~~ sh
    $ vim FILENAME
~~~
 3. 要退出 Vim，输入：`<Esc>`{normal} `:q!`{vim} `<Enter>`{normal} 来丢弃所有更改。
                或者输入：`<Esc>`{normal} `:wq`{vim} `<Enter>`{normal} 来保存更改。

 4. 要删除光标处的字符，输入：`x`{normal}

 5. 要插入或追加文本，输入：
    `i`{normal} 插入文本 `<Esc>`{normal}     在光标前插入。
    `A`{normal} 追加文本 `<Esc>`{normal}     在行尾追加。

注意：按 `<Esc>`{normal} 将使你进入普通模式，或取消一个不需要且未完成的命令。

现在继续第 2 课。

# 第 2.1 课：删除命令

** 输入 `dw`{normal} 来删除一个单词。 **

 1. 按 `<Esc>`{normal} 以确保你处于普通模式。

 2. 将光标移动到下面标记为 ✗ 的行。

 3. 将光标移动到需要删除的单词的开头。

 4. 输入 [d](d)[w](w) 让该单词消失。

There are a some words fun that don't belong paper in this sentence.

 5. 重复步骤 3 和 4，直到句子正确，然后前往第 2.2 课。

# 第 2.2 课：更多删除命令

** 输入 `d$`{normal} 来删除到行尾。 **

 1. 按 `<Esc>`{normal} 以确保你处于普通模式。

 2. 将光标移动到下面标记为 ✗ 的行。

 3. 将光标移动到正确行的末尾（在第一个 . 之后）。

 4. 输入 `d$`{normal} 删除到行尾。

Somebody typed the end of this line twice. end of this line twice.

 5. 前往第 2.3 课以了解发生了什么。

# 第 2.3 课：关于操作符和动作

许多更改文本的命令由一个[操作符](operator)和一个[动作](navigation)组成。
使用 [d](d) 删除操作符的删除命令格式如下：

    d   动作

  其中：
    d      - 是删除操作符。
    动作   - 是操作符将要操作的对象（见下文）。

  动作的简短列表：
    [w](w) - 直到下一个单词的开头，**不包括**其第一个字符。
    [e](e) - 到当前单词的结尾，**包括**最后一个字符。
    [$]($) - 到行尾，**包括**最后一个字符。

  因此，输入 `de`{normal} 将从光标删除到单词末尾。

注意：在普通模式下，只按动作键（不带操作符）将按指定方式移动光标。

# 第 2.4 课：对动作使用计数

** 在动作前输入数字可以使其重复多次。 **

 1. 将光标移动到下面标记为 ✓ 的行的开头。

 2. 输入 `2w`{normal} 将光标向前移动两个单词。

 3. 输入 `3e`{normal} 将光标移动到向前第三个单词的末尾。

 4. 输入 `0`{normal} ([0](0)) 移动到行首。

 5. 用不同的数字重复步骤 2 和 3。

This is just a line with words you can move around in.

 6. 前往第 2.5 课。

# 第 2.5 课：使用计数来删除更多

** 在操作符前输入数字可以使其重复多次。 **

在上面提到的删除操作符和动作的组合中，你可以在动作前插入一个计数来删除更多：
     d   数字   动作

 1. 将光标移动到标记为 ✗ 的行中的第一个大写单词上。

 2. 输入 `d2w`{normal} 删除两个大写单词。

 3. 使用不同的计数重复步骤 1 和 2，用一个命令删除连续的大写单词。

This ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.

# 第 2.6 课：对整行进行操作

** 输入 `dd`{normal} 删除整行。 **

由于删除整行的频率很高，Vi 的设计者认为简单地输入两个 d 来删除一行会更方便。

 1. 将光标移动到下面短语的第二行。
 2. 输入 [dd](dd) 删除该行。
 3. 现在移动到第四行。
 4. 输入 `2dd`{normal} 删除两行。

1)  Roses are red,
2)  Mud is fun,
3)  Violets are blue,
4)  I have a car,
5)  Clocks tell time,
6)  Sugar is sweet
7)  And so are you.

# 第 2.7 课：撤销命令

** 按 `u`{normal} 撤销上一个命令，按 `U`{normal} 修复整行。 **

 1. 将光标移动到下面标记为 ✗ 的行，并将其放在第一个错误上。
 2. 输入 `x`{normal} 删除第一个不需要的字符。
 3. 现在输入 `u`{normal} 撤销最后执行的命令。
 4. 这次使用 `x`{normal} 命令修复该行上的所有错误。
 5. 现在输入大写的 `U`{normal} 将该行恢复到原始状态。
 6. 现在多次输入 `u`{normal} 来撤销 `U`{normal} 及之前的命令。
 7. 现在多次输入 `<C-r>`{normal} (Control + R) 来重做命令（撤销撤销操作）。

Fiix the errors oon thhis line and reeplace them witth undo.

 8. 这些是非常有用的命令。现在前往第 2 课总结。

# 第 2 课总结

 1. 要从光标删除到下一个单词，输入：     `dw`{normal}
 2. 要从光标删除到行尾，输入：           `d$`{normal}
 3. 要删除整行，输入：                   `dd`{normal}
 4. 要重复一个动作，在其前面加上数字：   `2w`{normal}

 5. 更改命令的格式是：
               操作符   [数字]   动作
    where:
       操作符 -   是要做什么，例如 [d](d) 表示删除
       [数字] -   是可选的计数，用于重复动作
       动作   -   指定操作要覆盖的文本范围，例如：
                        [w](w) (单词),
                        [$]($) (到行尾), 等等。

 6. 要移动到行首，使用零：[0](0)

 7. 要撤销之前的操作，输入：            `u`{normal}  (小写 u)
    要撤销一行上的所有更改，输入：       `U`{normal}  (大写 U)
    要重做（撤销撤销操作），输入：        `<C-r>`{normal}

# 第 3.1 课：放置命令

** 输入 `p`{normal} 将先前删除的文本放到光标之后。 **

 1. 将光标移动到下面第一个标记为 ✓ 的行。

 2. 输入 `dd`{normal} 删除该行并将其存储在 Vim 寄存器中。

 3. 将光标移动到 c) 行，放在被删除行应该放置的位置**之上**。

 4. 输入 `p`{normal} 将行放在光标下方。

 5. 重复步骤 2 到 4，将所有行按正确顺序放置。

d) Can you learn too?
b) Violets are blue,
c) Intelligence is learned,
a) Roses are red,

# 第 3.2 课：替换命令

** 输入 `rx`{normal} 用 x 替换光标处的字符。 **

 1. 将光标移动到下面标记为 ✗ 的第一行。

 2. 移动光标，使其位于第一个错误上。

 3. 输入 `r`{normal}，然后输入应该在那里的字符。

 4. 重复步骤 2 和 3，直到第一行与第二行相同。

Whan this lime was tuoed in, someone presswd some wrojg keys!
When this line was typed in, someone pressed some wrong keys!

 5. 现在前往第 3.3 课。

注意：记住你应该通过动手做来学习，而不是死记硬背。

# 第 3.3 课：更改操作符

** 要更改到单词末尾，输入 `ce`{normal}。 **

 1. 将光标移动到下面标记为 ✗ 的第一行。

 2. 将光标放在 "lubw" 的 "u" 上。

 3. 输入 `ce`{normal} 和正确的单词（在这里，输入 "ine"）。

 4. 按 `<Esc>`{normal} 并移动到下一个需要更改的字符。

 5. 重复步骤 3 和 4，直到第一个句子与第二个相同。

This lubw has a few wptfd that mrrf changing usf the change operator.
This line has a few words that need changing using the change operator.

注意：[c](c)e 会删除单词并使你进入插入模式。

# 第 3.4 课：使用 `c`{normal} 进行更多更改

** 更改操作符与删除使用相同的动作。 **

 1. 更改操作符的工作方式与删除相同。格式是：

         c    [数字]   动作

 2. 动作是相同的，例如 `w`{normal} (单词) 和 `$`{normal} (行尾)。

 3. 移动到下面标记为 ✗ 的第一行。

 4. 将光标移动到第一个错误。

 5. 输入 `c$`{normal} 并像第二行那样输入该行的其余部分，然后按 `<Esc>`{normal}。

The end of this line needs some help to make it like the second.
The end of this line needs to be corrected using the c$ command.

注意：你可以在输入时使用退格键来纠正错误。

# 第 3 课总结

 1. 要放回刚刚删除的文本，输入 [p](p)。这会将删除的文本放在光标**之后**（如果删除了一行，
    它将放在光标下方的那一行）。

 2. 要替换光标下的字符，输入 [r](r)，然后输入你想要的字符。

 3. [更改操作符](c) 允许你从光标处更改到动作指定的位置。输入 `ce`{normal} 从光标更改到单词末尾，
    `c$`{normal} 更改到行尾。

 4. 更改的格式是：

     c   [数字]   动作

现在前往下一课。

# 第 4.1 课：光标位置和文件状态

** 输入 `<C-g>`{normal} 以显示你在文件中的位置和文件状态。
 输入 `{行号}G`{normal} 以移动到文件中的第 {行号} 行。 **

注意：在执行任何步骤之前，请阅读完整课内容！！

 1. 按住 `<Ctrl>`{normal} 键并按下 `g`{normal}。我们称之为 `<C-g>`{normal}。页面底部会出现一条消息，显示文件
    名和文件中的位置。记住步骤 3 所需的行号。

注意：你可能会在屏幕右下角看到光标位置。当 ['ruler']('ruler') 选项被设置
时，就会发生这种情况。
 2. 按 [G](G) 移动到文件底部。
    输入 [gg](gg) 移动到文件开头。

 3. 输入你所在的行号，然后输入 `G`{normal}。这将使你返回到第一次按 `<C-g>`{normal} 时所在的行。

 4. 如果你有信心，请执行步骤 1 到 3。

# 第 4.2 课：搜索命令

** 输入 `/`{normal} 后跟短语以搜索该短语。 **

 1. 在普通模式下输入 `/`{normal} 字符。注意它和光标会像 `:`{normal} 命令一样出现在屏幕底部。

 2. 现在输入 'errroor' `<Enter>`{normal}。这是你要搜索的单词。

 3. 要再次搜索相同的短语，只需输入 [n](n)。
    要朝相反方向搜索相同的短语，输入 [N](N)。

 4. 要向后搜索短语，使用 [?](?) 代替 `/`{normal}。

 5. 要返回到你来的地方，按 `<C-o>`{normal}（按住 `<Ctrl>`{normal} 同时按下字母 `o`{normal}）。重复按可以返回
 更早的位置。`<C-i>`{normal} 向前移动。

"errroor" is not the way to spell error; errroor is an error.

注意：当搜索到达文件末尾时，除非 ['wrapscan']('wrapscan') 选项被重置，否则它会从文件开头继续。


# 第 4.3 课：匹配括号搜索

** 输入 `%`{normal} 以找到匹配的 )、] 或 }。 **

 1. 将光标放在下面标记为 ✓ 的行中的任意 (、[ 或 { 上。

 2. 现在输入 [%](%) 字符。

 3. 光标将移动到匹配的括号或方括号。

 4. 输入 `%`{normal} 将光标移动到另一个匹配的括号。

 5. 将光标移动到另一个 (, ), [, ], { 或 } 上，看看 `%`{normal} 会做什么。

This ( is a test line with ('s, ['s ] and {'s } in it. ))

注意：这对于调试括号不匹配的程序非常有用！

# 第 4.4 课：替换命令

** 输入 `:s/旧文本/新文本/g` 以用“新文本”替换“旧文本”。 **

 1. 将光标移动到下面标记为 ✗ 的行。

 2. 输入
~~~ cmd
    :s/thee/the/
~~~
    注意 [:s](:s) 命令只更改了行中第一个 "thee" 的出现。

 3. 现在输入
~~~ cmd
     :s/thee/the/g
~~~
    添加 g [标志](:s_flags) 意味着在行中全局替换，更改行中所有 "thee" 的出现。

Usually thee best time to see thee flowers is in thee spring.

 4. 要更改两行之间的每个字符串出现，输入
~~~ cmd
     :#,#s/旧文本/新文本/g
~~~
    其中 #,# 是要进行替换的行范围的行号。

    输入
~~~ cmd
    :%s/旧文本/新文本/g
~~~
    以更改整个文件中的每个出现。

    输入
~~~ cmd
    :%s/旧文本/新文本/gc
~~~
    以查找整个文件中的每个匹配，并提示是否替换。

# 第 4 课总结

 1. `<C-g>`{normal}     显示你的位置和文件状态。
    `G`{normal}         移动到文件末尾。
    行号 `G`{normal}    移动到该行号。
    `gg`{normal}        移动到第一行。

 2. 输入 `/`{normal} 后跟短语向前搜索该短语。
    输入 `?`{normal} 后跟短语向后搜索该短语。
    搜索后输入 `n`{normal} 以在同一方向查找下一个出现，或输入 `N`{normal} 以朝相反方向搜索。
    `<C-o>`{normal} 带你回到较早的位置，`<C-i>`{normal} 到较新的位置。

 3. 当光标在 (, ), [, ], {, 或 } 上时，输入 `%`{normal} 会跳转到其匹配项。

 4. 要用新文本替换行中的第一个旧文本，输入
~~~ cmd
        :s/旧文本/新文本
~~~
    要用新文本替换行中的所有旧文本，输入
~~~ cmd
        :s/旧文本/新文本/g
~~~
    要替换两个行号之间的短语，输入
~~~ cmd
        :#,#s/旧文本/新文本/g
~~~
    要替换文件中的所有出现，输入
~~~ cmd
        :%s/旧文本/新文本/g
~~~
    要每次询问确认，添加 'c'
~~~ cmd
        :%s/旧文本/新文本/gc
~~~

# 第 5.1 课：如何执行外部命令

** 输入 `:!`{vim} 后跟外部命令以执行该命令。 **

 1. 输入熟悉的命令 `:`{normal} 将光标设置在屏幕底部。这允许你输入命令行命令。

 2. 现在输入 [!](!cmd)（感叹号）字符。这允许你执行任何外部 shell 命令。

 3. 例如，在 "!" 后面输入 "ls"，然后按 `<Enter>`{normal}。这将显示你目录的列表，
    就像你在 shell 提示符下一样。

注意：可以通过这种方式执行任何外部命令，也可以带参数。

注意：所有 `:`{vim} 命令必须通过按 `<Enter>`{normal} 来完成。从现在起，我们不会总是提到这一点。

# 第 5.2 课：关于写入文件的更多内容

** 要保存对文本所做的更改，输入 `:w`{vim} 文件名。 **

 1. 输入 `:!ls`{vim} 获取你目录的列表。你已经知道之后必须按 `<Enter>`{normal}。

 2. 选择一个尚不存在的文件名，例如 TEST。

 3. 现在输入：
~~~ cmd
        :w TEST
~~~
   （其中 TEST 是你选择的文件名。）

 4. 这将整个文件（Vim 教程）以 TEST 为名保存。要验证这一点，再次输入 `:!ls`{vim} 查看
    你的目录。

注意：如果你退出 Vim 并用 `vim TEST` 重新启动，该文件将是你保存时教程的精确副本。

 5. 现在通过输入以下命令删除该文件：
~~~ cmd
        :!rm TEST
~~~

# 第 5.3 课：选择要写入的文本

** 要保存文件的一部分，输入 `v`{normal} 动作 `:w 文件名`{vim}。 **

 1. 将光标移动到本行。

 2. 按 [v](v) 并将光标移动到下面第五个项目。注意文本被高亮显示。

 3. 按 `:`{normal} 字符。屏幕底部会出现

        :'<,'>

 4. 输入

        `:w TEST`{vim}

    其中 TEST 是一个尚不存在的文件名。验证在按 `<Enter>`{normal} 之前你看到的是

        `:'<,'>w TEST`{vim}

 5. Vim 会将选定的行写入文件 TEST。使用 `:!ls`{vim} 查看它。先不要删除它！我们
    将在下一课中使用它。

注意：按 [v](v) 启动[可视选择](visual-mode)。你可以移动光标来扩大或缩小选择范围。
然后你可以使用操作符对文本执行操作。例如，`d`{normal} 删除文本。

# 第 5.4 课：检索和合并文件

** 要插入文件的内容，输入 `:r 文件名`{vim}。 **

 1. 将光标放在本行上方。

注意：执行步骤 2 后，你将看到第 5.3 课的文本。然后向下移动以再次看到本课。

 2. 现在使用以下命令检索你的 TEST 文件

        `:r TEST`{vim}

     其中 TEST 是你使用的文件名。检索到的文件放在光标行的下方。

 3. 要验证文件已被检索，将光标移回并注意现在有两个第 5.3 课的副本，原始版本和文
    件版本。

注意：你也可以读取外部命令的输出。例如，

        `:r !ls`{vim}

     读取 `ls` 命令的输出并将其放在光标下方。

# 第 5 课总结

 1. [:!命令](:!cmd) 执行外部命令。

     一些有用的例子是：
     `:!ls`{vim}              - 显示目录列表
     `:!rm 文件名`{vim}       - 删除文件 FILENAME

 2. [:w](:w) 文件名            将当前 Vim 文件以文件名保存到磁盘。

 3. [v](v)  动作  :w 文件名   将可视选择的行保存到文件 FILENAME。

 4. [:r](:r) 文件名            从磁盘检索文件 FILENAME 并将其放在光标位置下方。

 5. [:r !dir](:r!)              读取 dir 命令的输出并将其放在光标位置下方。

# 第 6.1 课：打开命令

** 输入 `o`{normal} 以在光标下方打开一行并使你进入插入模式。 **

 1. 将光标移动到下面标记为 ✓ 的行。

 2. 输入小写字母 `o`{normal} 以在光标**下方**[打开](o)一行并使你进入插入模式。

 3. 现在输入一些文本并按 `<Esc>`{normal} 退出插入模式。

输入 `o`{normal} 后，光标被置于打开的行上，处于插入模式。

 4. 要在光标**上方**打开一行，只需输入[大写 O](O)，而不是小写 `o`{normal}。在下面一行试试。

在此行上方打开一行，在光标位于此行时输入 O。

# 第 6.2 课：追加命令

** 输入 `a`{normal} 以在光标**之后**插入文本。 **

 1. 将光标移动到下面标记为 ✗ 的行的开头。

 2. 按 `e`{normal} 直到光标位于 "li" 的末尾。

 3. 输入小写字母 `a`{normal} 以在光标**之后**[追加](a)文本。

 4. 像下面那行一样完成单词。按 `<Esc>`{normal} 退出插入模式。

 5. 使用 `e`{normal} 移动到下一个不完整的单词，重复步骤 3 和 4。

This li will allow you to pract appendi text to a line.
This line will allow you to practice appending text to a line.

注意：[a](a)、[i](i) 和 [A](A) 都进入相同的插入模式，唯一的区别是字符插入的位置。

# 第 6.3 课：另一种替换方式

** 输入大写 `R`{normal} 以替换多个字符。 **

 1. 将光标移动到下面标记为 ✗ 的第一行。将光标移动到第一个 "xxx" 的开头。

 2. 现在按 `R`{normal} ([大写 R](R)) 并输入第二行中它下面的数字，以替换 "xxx"。

 3. 按 `<Esc>`{normal} 离开[替换模式](mode-replace)。注意该行的其余部分保持不变。

 4. 重复步骤以替换剩余的 "xxx"。

Adding 123 to xxx gives you xxx.
Adding 123 to 456 gives you 579.

注意：替换模式类似于插入模式，但每个键入的字符都会删除一个现有字符。

# 第 6.4 课：复制和粘贴文本

** 使用 `y`{normal} 操作符复制文本，使用 `p`{normal} 粘贴它。 **

 1. 转到下面标记为 ✓ 的行，将光标放在 "a)" 之后。

 2. 用 `v`{normal} 启动可视模式，并将光标移动到 "first" 之前。

 3. 输入 `y`{normal} 以[复制](yank)（复制）高亮的文本。

 4. 将光标移动到下一行的末尾：`j$`{normal}

 5. 输入 `p`{normal} 以[放置](put)（粘贴）文本。

 6. 按 `a`{normal}，然后输入 "second"。按 `<Esc>`{normal} 离开插入模式。

 7. 使用可视模式选择 "item."，用 `y`{normal} 复制它，用 `j$`{normal} 移动到下一
    行的末尾，并用 `p`{normal} 将文本放在那里。

a) This is the first item.
b)

注意：你可以将 `y`{normal} 用作操作符：`yw`{normal} 复制一个单词。

# 第 6.5 课：设置选项

** 设置选项以使搜索或替换忽略大小写。 **

 1. 通过输入搜索 'ignore'：`/ignore`
    通过按 `n`{normal} 重复几次。

 2. 通过输入设置 'ic'（忽略大小写）选项：
~~~ cmd
        :set ic
~~~
 3. 现在再次通过按 `n`{normal} 搜索 'ignore'。
    注意现在 Ignore 和 IGNORE 也被找到了。

 4. 设置 'hlsearch' 和 'incsearch' 选项：
~~~ cmd
        :set hls is
~~~
 5. 现在再次输入搜索命令，看看会发生什么：/ignore <Enter>

 6. 要禁用忽略大小写，输入：
~~~ cmd
        :set noic
~~~
 7. 要切换设置的开关，在前面加上 "inv"：
~~~ cmd
        :set invic
~~~
注意：要移除匹配项的高亮显示，输入：
~~~ cmd
        :nohlsearch
~~~
注意：如果你只想对一次搜索命令忽略大小写，在短语中使用 [\c](/\c)：/ignore\c <Enter>

# 第 6 课总结

 1. 输入 `o`{normal} 在光标**下方**打开一行并启动插入模式。
    输入 `O`{normal} 在光标**上方**打开一行。

 2. 输入 `a`{normal} 在光标**之后**插入文本。
    输入 `A`{normal} 在行尾之后插入文本。

 3. `e`{normal} 命令移动到单词末尾。

 4. `y`{normal} 操作符复制文本，`p`{normal} 粘贴它。

 5. 输入大写 `R`{normal} 进入替换模式，直到按 `<Esc>`{normal}。

 6. 输入 "[:set](:set) xxx" 设置选项 "xxx"。一些选项是：

        'ic' 'ignorecase'   搜索时忽略大小写
        'is' 'incsearch'    显示搜索短语的部分匹配
        'hls' 'hlsearch'    高亮所有匹配的短语

     你可以使用完整或简短的选项名。

 7. 在前面加上 "no" 来关闭选项：
~~~ cmd
        :set noic
~~~
 8. 在前面加上 "inv" 来切换选项：
~~~ cmd
        :set invic
~~~

# 第 7.1 课：获取帮助

** 使用在线帮助系统。 **

Vim 有一个全面的在线帮助系统。要开始使用，试试以下三种方法之一：
    - 按 `<HELP>`{normal} 键（如果你有的话）
    - 按 `<F1>`{normal} 键（如果你有的话）
    - 输入
        `:help`{vim}

阅读帮助窗口中的文本以了解帮助的工作原理。
输入 `<C-w><C-w>`{normal} 从一个窗口跳转到另一个窗口。
输入 `:q`{vim} 关闭帮助窗口。

你可以通过给 ":help" 命令一个参数来找到几乎所有主题的帮助。试试这些（别忘了按
<Enter>）：
~~~ cmd
    :help w
    :help c_CTRL-D
    :help insert-index
    :help user-manual
~~~
# 第 7.2 课：创建启动脚本

** 启用 Vim 功能。 **

Vim 比 Vi 有更多的功能，但大多数默认是禁用的。要开始使用更多功能，你必须创建一
个 "vimrc" 文件。

 1. 开始编辑 "vimrc" 文件。这取决于你的系统：
    对于类 UNIX              对于 Windows
    `:e ~/.vimrc`{vim}               `:e ~/_vimrc`{vim}

 2. 现在读取示例 "vimrc" 文件的内容：
    `:r $VIMRUNTIME/vimrc_example.vim`{vim}

 3. 写入文件：
    `:w`{vim}

  下次你启动 Vim 时，它将使用语法高亮。
  你可以将你所有偏好的设置添加到此 "vimrc" 文件中。
  更多信息请输入 `:help vimrc-intro`{vim}。

# 第 7.3 课：补全

** 使用 `<C-d>`{normal} 和 `<Tab>`{normal} 进行命令行补全。 **

 1. 查看目录中存在哪些文件：`:!ls`{vim}

 2. 输入一个命令的开头：`:e`{vim}

 3. 按 `<C-d>`{normal}，Vim 将显示以 "e" 开头的命令列表。

 4. 按 `<Tab>`{normal}，Vim 将显示一个包含可能补全项的菜单（或者，如果输入的命
    令是唯一的，例如 ":ed`<Tab>`{normal}" 将被补全为 ":edit"）。

 5. 使用 `<Tab>`{normal} 或 `<C-n>`{normal} 转到下一个匹配项。或者使用 `<S-Tab>`{normal} 或 `<C-p>`{normal} 转到上一个匹配项。

 6. 选择 `edit`{vim} 条目。现在你可以看到 `edit`{vim} 这个词已自动插入到命令行。

 7. 现在添加一个空格和一个现有文件名的开头：`:edit FIL`{vim}

 8. 按 `<Tab>`{normal}。Vim 将显示一个补全菜单，列出以 `FIL` 开头的文件名。

注意：补全适用于许多命令。对于 `:help`{vim} 尤其有用。

# Lesson 7 SUMMARY

# 第 7 课总结

 1. 输入 `:help`{vim}
    或按 `<F1>`{normal} 或 `<Help>`{normal} 打开帮助窗口。

 2. 输入 `:help 主题`{vim} 查找关于该主题的帮助。

 3. 输入 `<C-w><C-w>`{normal} 跳转到另一个窗口。

 4. 输入 `:q`{vim} 关闭帮助窗口。

 5. 创建一个 vimrc 启动脚本来保存你偏好的设置。

 6. 在命令模式下，按 `<C-d>`{normal} 查看可能的补全项。按 `<Tab>`{normal} 使用补全菜单并选择匹配项。

# 结束语

Vim 教程的第一章到此结束。请考虑继续学习[第二章](@tutor:vim-02-beginner)。

本章旨在对 Vim 编辑器进行简要概述，让你能够相当容易地使用该编辑器。由于 Vim 有
非常多的命令，本章内容远非完整。请经常查阅帮助。

网上有许多资源可以帮助你了解更多关于 Vim 的知识。这里列出了一些：

- *Learn Vim Progressively*: http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/
- *Learning Vim in 2014*: http://benmccormick.org/learning-vim-in-2014/
- *Vimcasts*: http://vimcasts.org/
- *Vim Video-Tutorials by Derek Wyatt*: http://derekwyatt.org/vim/tutorials/
- *Learn Vimscript the Hard Way*: http://learnvimscriptthehardway.stevelosh.com/
- *7 Habits of Effective Text Editing*: http://www.moolenaar.net/habits.html
- *vim-galore*: https://github.com/mhinz/vim-galore

如果你更喜欢看书，Drew Neil 所著的 *Practical Vim* 及其续作 *Modern Vim* 常被推荐。

本教程由科罗拉多矿业大学的 Michael C. Pierce 和 Robert K. Ware 编写，使用了科罗
拉多州立大学的 Charles Smith 提供的想法。邮箱：bware@mines.colorado.edu。

由 Mao-Yining <mao.yining@outlook.com> 翻译
由 Bram Moolenaar 为 Vim 修改。
由 Felipe Morales 为 vim-tutor-mode 修改。
