# vim命令

> 参考资料：<https://www.cnblogs.com/shanwu369/p/10977244.html>

## 1. vim的基本概念

基本上vim可以分为三种状态：

* 命令行模式(command mode）

  控制屏幕光标的移动，字符、字或行的删除，移动复制某区段及进入Insert mode下，或者到 last line mode；
* 插入模式（Insert mode）

  只有在Insert mode下，才可以做文字输入，按ESC键可回到命令行模式；
* 底行模式（last line mode）

  将文件保存或退出vi，也可以设置编辑环境，如寻找字符串、列出行号……等。

## 2. vim基本操作

1. **进入vim**

在系统提示符号输入vi及文件名称后，就进入vi全屏幕编辑画面，例如：

```bash
vi /disk1/docs/vim.md
```

vi之后处于命令行模式，您要切换到插入模式才能够输入文字。

1. **切换至插入模式（Insert mode）编辑文件**

   在命令行模式下按一下字母i就可以进入插入模式，输入文字了。
2. **Insert 的切换**

   处于插入模式，您就只能一直输入文字，如果您发现输错了字！想用光标键往回移动，将该字删除，就要先按一下ESC键转到命令行模式再删除文字。
3. **退出vi及保存文件**

   在命令行模式下，按一下：冒号键进入底行模式，例如：

   　　: w filename （输入w filename将文章以指定的文件名filename保存）

   　　: wq (输入wq，存盘并退出vi)

   　　: q! (输入q!， 不存盘强制退出vi)

## 3. 命令行模式功能按键

1. **插入模式**

   按「i」切换进入插入模式，按"i"进入插入模式后是从光标当前位置开始输入文件；

   按「a」进入插入模式后，是从目前光标所在位置的下一个位置开始输入文字；

   按「o」进入插入模式后，是插入新的一行，从行首开始输入文字。
2. **从插入模式切换为命令行模式**

   按ESC键。
3. **移动光标**

   vi可以直接用键盘上的光标来上下左右移动，但正规的vi是用小写英文字母「h」、「j」、「k」、「l」，分别控制光标左、下、上、右移一格。

   按「ctrl」+「b」：屏幕往"后"移动一页。

   按「ctrl」+「f」：屏幕往"前"移动一页。

   按「ctrl」+「u」：屏幕往"后"移动半页。

   按「ctrl」+「d」：屏幕往"前"移动半页。

   按数字「0」：移到文章的开头。

   按「G」：移动到文章的最后。

   按「$」：移动到光标所在行的"行尾"。

   按「^」：移动到光标所在行的"行首"

   按「w」：光标跳到下个字的开头

   按「e」：光标跳到下个字的字尾

   按「b」：光标回到上个字的开头

   按「#l」：光标移到该行的第#个位置，如：5l,56l。
4. **删除文字**

   「x」：每按一次，删除光标所在位置的"后面"一个字符。

   「#x」：例如，「6x」表示删除光标所在位置的"后面"6个字符。

   「X」：大写的X，每按一次，删除光标所在位置的"前面"一个字符。

   「#X」：例如，「20X」表示删除光标所在位置的"前面"20个字符。

   「dd」：删除光标所在行。

   「#dd」：从光标所在行开始删除#行
5. **复制**

   「yw」：将光标所在之处到字尾的字符复制到缓冲区中。

   「#yw」：复制#个字到缓冲区

   「yy」：复制光标所在行到缓冲区。

   「#yy」：例如，「6yy」表示拷贝从光标所在的该行"往下数"6行文字。

   「p」：将缓冲区内的字符贴到光标所在位置。注意：所有与"y"有关的复制命令都必须与"p"配合才能完成复制与粘贴功能。
6. **替换**

   「r」：替换光标所在处的字符。

   「R」：替换光标所到之处的字符，直到按下「ESC」键为止。
7. **回复上一次操作**

   「u」：如果您误执行一个命令，可以马上按下「u」，回到上一个操作。按多次"u"可以执行多次回复。
8. **更改**

   「cw」：更改光标所在处的字到字尾处

   「c#w」：例如，「c3w」表示更改3个字
9. **跳至指定的行**

   「ctrl」+「g」列出光标所在行的行号。

   「#G」：例如，「15G」，表示移动光标至文章的第15行行首。

## 4. last line mode命令

在使用「last line mode」之前，请记住先按「ESC」键确定您已经处于「command mode」下后，再按「：」冒号即可进入「last line mode」。

1. **列出行号**

   「set nu」：输入「set nu」后，会在文件中的每一行前面列出行号。
2. **跳到文件中的某一行**

   「#」：「#」号表示一个数字，在冒号后输入一个数字，再按回车键就会跳到该行了，如输入数字15，再回车，就会跳到文章的第15行。
3. **查找字符**

   「/关键字」：先按「/」键，再输入您想寻找的字符，如果第一次找的关键字不是您想要的，可以一直按「n」会往后寻找到您要的关键字为止。

   「?关键字」：先按「?」键，再输入您想寻找的字符，如果第一次找的关键字不是您想要的，可以一直按「n」会往前寻找到您要的关键字为止。
4. **保存文件**

   「w」：在冒号输入字母「w」就可以将文件保存起来。
5. **离开vi**

   「q」：按「q」就是退出，如果无法离开vi，可以在「q」后跟一个「!」强制离开vi。

   「qw」：一般建议离开时，搭配「w」一起使用，这样在退出的时候还可以保存文件。

## 5. vi命令列表

**1、下表列出命令模式下的一些键的功能：**

h 左移光标一个字符

l 右移光标一个字符

k 光标上移一行

j 光标下移一行

^ 光标移动至行首

0 数字"0"，光标移至文章的开头

G 光标移至文章的最后

$ 光标移动至行尾

Ctrl+f 向前翻屏

Ctrl+b 向后翻屏

Ctrl+d 向前翻半屏

Ctrl+u 向后翻半屏

i 在光标位置前插入字符

a 在光标所在位置的后一个字符开始增加

o 插入新的一行，从行首开始输入

ESC 从输入状态退至命令状态

x 删除光标后面的字符

\#x 删除光标后的＃个字符

X (大写X)，删除光标前面的字符

\#X 删除光标前面的#个字符 dd 删除光标所在的行

\#dd 删除从光标所在行数的#行

yw 复制光标所在位置的一个字

\#yw 复制光标所在位置的#个字

yy 复制光标所在位置的一行

\#yy 复制从光标所在行数的#行

p 粘贴

u 取消操作

cw 更改光标所在位置的一个字

\#cw 更改光标所在位置的#个字

**2、下表列出行命令模式下的一些指令**

w filename 储存正在编辑的文件为filename

wq filename 储存正在编辑的文件为filename，并退出vi

q! 放弃所有修改，退出vi

set nu 显示行号
