使用 Vi/Vim 编辑器：基础篇
VI 编辑器是一个基于命令行的、功能强大的文本编辑器，最早为 Unix 系统开发，后来也被移植到许多的 Unix 和 Linux 发行版上。
Vim Vi
VI 编辑器是一个基于命令行的、功能强大的文本编辑器，最早为 Unix 系统开发，后来也被移植到许多的 Unix 和 Linux 发行版上。
![](/data/attachment/album/201802/08/191332xx3uhxhek3kk0g3f.png)


VI 编辑器是一个基于命令行的、功能强大的文本编辑器，最早为 Unix 系统开发，后来也被移植到许多的 Unix 和 Linux 发行版上。


在 Linux 上还存在着另一个 VI 编辑器的高阶版本 —— VIM（也被称作 VI IMproved）。VIM 只是在 VI 已经很强的功能上添加了更多的功能，这些功能有：


* 支持更多 Linux 发行版，
* 支持多种编程语言，包括 python、c++、perl 等语言的代码块折叠，语法高亮，
* 支持通过多种网络协议，包括 http、ssh 等编辑文件，
* 支持编辑压缩归档中的文件，
* 支持分屏同时编辑多个文件。


接下来我们会讨论 VI/VIM 的命令以及选项。本文出于教学的目的，我们使用 VI 来举例，但所有的命令都可以被用于 VIM。首先我们先介绍 VI 编辑器的两种模式。


### 命令模式


命令模式下，我们可以执行保存文件、在 VI 内运行命令、复制/剪切/粘贴操作，以及查找/替换等任务。当我们处于插入模式时，我们可以按下 `Escape`（`Esc`）键返回命令模式


### 插入模式


在插入模式下，我们可以键入文件内容。在命令模式下按下 `i` 进入插入模式。


### 创建文件


我们可以通过下述命令建立一个文件（LCTT 译注：如果该文件存在，则编辑已有文件）：



```
$ vi filename

```

一旦该文件被创建或者打开，我们首先进入命令模式，我们需要进入输入模式以在文件中输入内容。我们通过前文已经大致上了解这两种模式。


### 退出 Vi


如果是想从插入模式中退出，我们首先需要按下 `Esc` 键进入命令模式。接下来我们可以根据不同的需要分别使用两种命令退出 Vi。


1. 不保存退出 - 在命令模式中输入 `:q!`
2. 保存并退出 - 在命令模式中输入 `:wq`


### 移动光标


下面我们来讨论下那些在命令模式中移动光标的命令和选项：


1. `k` 将光标上移一行
2. `j` 将光标下移一行
3. `h` 将光标左移一个字母
4. `l` 将光标右移一个字母
注意：如果你想通过一个命令上移或下移多行，或者左移、右移多个字母，你可以使用 `4k` 或者 `5l`，这两条命令会分别上移 4 行或者右移 5 个字母。
5. `0` 将光标移动到该行行首
6. `$` 将光标移动到该行行尾
7. `nG` 将光标移动到第 n 行
8. `G` 将光标移动到文件的最后一行
9. `{` 将光标移动到上一段
10. `}` 将光标移动到下一段


除此之外还有一些命令可以用于控制光标的移动，但上述列出的这些命令应该就能应付日常工作所需。


### 编辑文本


这部分会列出一些用于命令模式的命令，可以进入插入模式来编辑当前文件


1. `i` 在当前光标位置之前插入内容
2. `I` 在光标所在行的行首插入内容
3. `a` 在当前光标位置之后插入内容
4. `A` 在光标所在行的行尾插入内容
5. `o` 在当前光标所在行之后添加一行
6. `O` 在当前光标所在行之前添加一行


### 删除文本


以下的这些命令都只能在命令模式下使用，所以首先需要按下 `Esc` 进入命令模式，如果你正处于插入模式：


1. `dd` 删除光标所在的整行内容，可以在 `dd` 前增加数字，比如 `2dd` 可以删除从光标所在行开始的两行
2. `d$` 删除从光标所在位置直到行尾
3. `d^` 删除从光标所在位置直到行首
4. `dw` 删除从光标所在位置直到下一个词开始的所有内容


### 复制与黏贴


1. `yy` 复制当前行，在 `yy` 前添加数字可以复制多行
2. `p` 在光标之后粘贴复制行
3. `P` 在光标之前粘贴复制行


上述就是可以在 VI/VIM 编辑器上使用的一些基本命令。在未来的教程中还会继续教授一些更高级的命令。如果有任何疑问和建议，请在下方评论区留言。




---


via: <http://linuxtechlab.com/working-vi-editor-basics/>


作者：[Shusain](http://linuxtechlab.com/author/shsuain/) 译者：[ljgibbslf](https://github.com/ljgibbslf) 校对：[wxy](https://github.com/wxy)


本文由 LCTT 原创编译，Linux中国 荣誉推出

