> For the complete documentation index, see [llms.txt](https://jimmy-walker.gitbook.io/linux-shell/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jimmy-walker.gitbook.io/linux-shell/linux-brief/linux-vi-vim.md).

# Linux vi vim

\#Brief

所有的 Unix Like 系统都会内建 vi 文书编辑器，其他的文书编辑器则不一定会存在。

但是目前我们使用比较多的是 vim 编辑器。**vi 是老式的字处理器，不过功能已经很齐全了，但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具**。

\#Command

1. vi/vim 共分为三种模式，分别是一般模式、编辑模式与指令列命令模式，**记住remember**下图。 这三种模式的作用分别是：

   1. 一般模式：以 vi 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中， 你可以使用『上下左右』按键来移动光标，你可以使用『删除字符』或『删除整行』来处理档案内容， 也可以使用『复制、贴上』来处理你的文件数据。
   2. 编辑模式：在一般模式中可以进行删除、复制、贴上等等的动作，但是却无法编辑文件内容的！ 要等到你按下『i, I, o, O, a, A, r, R』等任何一个字母之后才会进入编辑模式。注意了！通常在 Linux 中，按下这些按键时，在画面的左下方会出现『INSERT 或 REPLACE 』的字样，此时才可以进行编辑。而如果要回到一般模式时， 则必须要按下『Esc』这个按键即可退出编辑模式。
   3. 指令列命令模式：在一般模式当中，输入『 : / ? 』三个中的任何一个按钮，就可以将光标移动到最底下那一行。在这个模式当中， 可以提供你『搜寻资料』的动作，而读取、存盘、大量取代字符、离开 vi 、显示行号等等的动作则是在此模式中达成的！

   <img src="https://645505396-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M1hyx_BRCRbdLBFBm4f%2Fuploads%2Fgit-blob-685fb6924c698274da912a8835b99583d52f1028%2Fvi_model.png?alt=media" alt="" data-size="original">
2. vi/vim 使用实例

   1. 使用 vi/vim 进入一般模式，`[root@www ~]# vi test.txt`。**直接输入`vi 文件名`就能够进入 vi (visual interface) 的一般模式了**。请注意，记得 vi 后面一定要加文件名，不管该文件存在与否！

   **`[Ctrl] + [f]`：(forward)屏幕『向下』移动一页，相当于 \[Page Down]按键 (常用)**

   **`[Ctrl] + [b]`：(backward)屏幕『向上』移动一页，相当于 \[Page Up] 按键 (常用)**

   **`0` 或功能键\[Home]：这是数字『 0 』：移动到这一行的最前面字符处 (常用)**

   **`$` 或功能键\[End]：移动到这一行的最后面字符处(常用)**

   **`G`：(ground)移动到这个档案的最后一行(常用)**

   **`n<Enter>`：n 为数字。光标向下移动 n 行(常用)**

   **`nG`：n 为数字。移动到这个档案的第 n 行。例如20G则移动到这个档案的第 20 行**

   `/word`：向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串，就输入 /vbird 即可！ (常用)

   `:nohlsearch`命令可以使得高亮寻找关闭。记忆为no highlight search。（常用）

   `?word`：向光标之上寻找一个字符串名称为 word 的字符串。

   `n`：(next)这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说， 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串，则按下 n 后，会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话，那么按下 n 则会向上继续搜寻名称为 vbird 的字符串！

   `N`：这个 N 是英文按键。与 n 刚好相反，为『反向』进行前一个搜寻动作。 例如 /vbird 后，按下 N 则表示『向上』搜寻 vbird 。

   **使用 /word 配合 n 及 N 可以让你重复的找到一些你搜寻的关键词！**

   **`x或X`：(exit)在一行字当中，x 为向后删除一个字符 (相当于 \[del] 按键)， X 为向前删除一个字符(相当于 \[backspace] 亦即是退格键) (常用)**

   **`dd`：(delete)删除游标所在的那一整行(常用)**

   `ndd`：n 为数字。删除当前光标所在处及以下的n行 (常用)

   **`yy`：(yank)复制游标所在的那一行(常用)**

   **`p`：(paste)粘贴缓冲区中的内容(常用)**

   **`y$`复制光标所在位置到行尾内容到缓存区(常用)**

   **`y0`复制光标所在位置到行首内容到缓存区(常用)**

   `nyy`：n 为数字。 复制当前光标所在处及以下的n行 (常用)

   `u`：(undo)复原前一个动作。J类似于word中的左箭头(常用)

   `[Ctrl]+r`：(recover)恢复撤销的更改。J类似word中的右箭头(常用)

   **这个 u 与 \[Ctrl]+r 是很常用的指令！一个是复原，另一个则是重做一次。**

   !\[]\(/assets/ordinary mode.jpg)

   1. **按下 i (insert)进入编辑模式，编辑模式只能写文字，不能删除！！！！**，开始编辑文字。在一般模式之中，只要按下 i, o, a 等字符就可以进入编辑模式了。在编辑模式当中，你可以发现在**左下角状态栏中会出现 –INSERT- 的字样**，那就是可以输入任意字符的提示。这个时候，键盘上除了 \[Esc] 这个按键之外，其他的按键都可以视作为一般的输入按钮了，所以你可以进行任何的编辑。**按下 \[ESC] 按钮回到一般模式**。

   !\[]\(/assets/edit mode.jpg)

   1. 存盘并离开的指令很简单，**输入`:wq`(write and quit)即可保存离开**。

   **`:q!`：若曾修改过档案，又不想储存，使用 ! 为强制离开不储存档案**。

   **`:q`：离开 vi (常用)**。

   !\[]\(/assets/ordinary mode save.jpg)

\#Reference

* [Linux vi/vim](http://www.runoob.com/linux/linux-vim.html)
