Simon Y.
open main menu
Part of series: tech

vim 笔记

/ 14 min read

这篇文档主要记录使用 VIM 的一些命令,要想真正用好 VIM 还需要进行大量的练习,使其成为肌肉记忆,道理和用键盘打字是一样的。

1. 移动光标

在学习移动光标之前,要了解 VIM 有三种工作模式:普通模式、插入模式、视图模式。移动光标的操作是在普通模式下进行的。

怎样移动光标呢?一种很简单的方法,是用方向键移动。但是我们在写代码的时候,双手放在键盘的字母区,要移动光标的使用,还要把手挪到方向键上,然后来回的按上下左右,移动光标,这样是不是很麻烦?VIM 用什么方法移动光标呢? h j k l 就这四个键,就能实现光标在左、下、上、右四个方向上移动。而且,我们能注意到,这四个键就在你右手的食指、中指、无名指下方,操作起来很方便。

2. 插入模式

2.1. 进入插入模式和退出

打开一个文件后,我们需要输入内容,这时候怎么办呢?这就用到 VIM 的插入模式。进入插入模式的方法很简单,按一下键盘上的 i 键就可以输入内容了,输完内容需要退出的时候,按一下 Esc 键。

2.2. 多种进入插入模式方法

如果只是按 i 进入插入模式的话,你会发现每次插入的位置都在光标前面,如果需要在后面插入,还得把光标向后移,如果需要在一行末尾插入内容的话,这时候你就会发现,按 i 根本定位不到那里,还得按方向键,怎么办呢?其实 VIM 还有很多种插入方法。

按键含义
i在光标前进入插入模式
I在光标所在行行首进入插入模式
a在光标后进入插入模式
A在光标所在行行尾进入插入模式
o在光标所在行下方插入空行进入插入模式
O在光标所在行上方插入空行进入插入模式
s删除光标指定的字符并进入插入模式
S将光标所在行清除并进入插入模式

2.3. 退出 VIM

在退出 VIM 前,按 Esc 键使其回到普通模式。

a. 保存修改并退出

  • Shift + z + z
  • : + w + q

b. 直接退出不修改

  • 未做改动,: + q
  • 放弃改动,: + q + !

3. 删除、撤销、恢复命令及数字用法

3.1. 删除命令

在普通模式下,用 x 命令删除单一字符,作用同插入模式下的 Delete 键。删除更多字符用 d 命令。

3.2. 组合删除命令

在使用组合删除命令前,先要了解一些更高级的光标操作动作。除了上面的 hjkl 之外,还有一些移动光标动作命令,值得掌握,因为这些命令能够实现快速的将光标定位到我们需要的位置。

按键含义
0将光标定位到行首
^同上
$将光标定位到行尾
b将光标定位到光标所在单词的起始处
e将光标定位到光标所在单词的结尾处
w讲标定位到下一个单词的起始处
gg将光标定位到文件开头
G将光标定位到文件末尾

然后在这些命令前加上 d 键,就能实现多种删除功能。

按键含义
d0删除光标从当前位置(不包含)到该行行首的所有字符
d^同上
d$删除从光标当前位置(包含)到该行行尾的所有字符
db删除从光标当前位置(不包含)到单词起始处的所有字符
de删除从光标当前位置(包含)到单词结尾处的所有字符
dw删除从光标当前位置(包含)到下个单词起始处的所有字符
dd删除光标所在行的所有字符
dgg删除光标所在行(包含)到文件开头的所有字符
dG删除光标所在行(包含)到文件末尾的所有字符
dh删除光标前面一个字符
dl删除光标指定的字符
dj删除光标所在行以及下一行的所有字符
dk删除光标所在行以及上一行的所有字符

记忆规律可以简单的归纳为**向前删除不包含光标指定字符本身,向后删除包含光标指定字符本身。**使用中要学会举一反三,熟练运用 hjkl 和删除命令,通过不同的组合方式,达到快速删除目的。

3.3. 数字的应用

利用数字可以更高效的运用 VIM。在 hjkl 前加上数字,就表示向某个方向移动多少个字符或多少行。同样,在删除命令中,也可以在 d 命令后加数字再加动作命令,就能实现按照指定字符或行数进行删除。

3.4. 撤销和恢复

a. 撤销

  • u,撤销最后一次修改
  • U,撤销对整行的修改

b. 恢复

  • Ctrl + r,恢复撤销的内容

4. 粘贴、拷贝、替换、修改

重点:VIM 中使用删除命令,并不会直接删除,而是放在 VIM 寄存器中,类似于剪贴板。

注意:这些命令都是在普通模式下进行。

4.1. 粘贴命令

通过删除命令删除一段内容后,这段内容放在了寄存器中,需要把这段内容放入其他地方时,只需要把光标定位到要放入的位置,然后按下 p 键将删除的内容放入光标之后,或按 Shift + p 将内容放入光标之前。

注意:删除的内容是整段时,会另起一行粘贴;删除的内容是非整段时,会粘贴在光标之后的同一段。

4.2. 拷贝命令

拷贝的命令是 y ,用法和删除命令 d 一样,也可以使用数字。

4.3. 替换命令

替换命令是 r,将光标移动到要替换的字符上,按下 r 再输出新字符即可替换光标所在的字符。

使用 数字 + r 表示从光标开始替换 数字 个字符。

4.4. 替换模式

按下 Shift + r 进入替换模式,可以连续替换光标处及其后内容,按 Backspace 则恢复被替换字符之前的内容。

4.5. 修改命令

注意:修改会进入插入模式,替换不会进入插入模式。

修改命令是 c,后可跟 数字 + 动作命令,用法同删除命令 d

按键含义
c0删除光标从当前位置(不包含)到该行行首的所有字符,并进入插入模式
c^同上
c$删除从光标当前位置(包含)到该行行尾的所有字符,并进入插入模式
cb删除从光标当前位置(不包含)到单词起始处的所有字符,并进入插入模式
ce删除从光标当前位置(包含)到单词结尾处的所有字符,并进入插入模式
cw删除从光标当前位置(包含)到下个单词起始处的所有字符,并进入插入模式
ch删除光标前边一个字符,并进入插入模式
cl删除光标指定的字符,并进入插入模式
cj删除光标所在行以及下一行的所有字符,并在光标下一行进入插入模式
ck删除光标所在行以及上一行的所有字符,并在光标下一行进入插入模式
cc删除光标所在行的字符,并进入插入模式

重点:修改命令 = 删除 + 进入插入模式

注意:修改命令进入插入模式时的光标就在要修改的位置上。

5. 文件信息、跳转、定位括号和缩进

5.1. 文件信息

快捷键: Ctrl + g

5.2. 跳转

两种跳转方式

  • 行号 + Shift + g
  • : + 行号

5.3. 定位括号

将光标放在括号的一边上,按下 % 即可定位另一边的括号所在位置。

5.4. 缩进

缩进一行用 >>,反缩进一行用 <<

缩进多行用 可视模式,按 v 进入。用 hjkl 或组合动作命令移动光标,光标移动到的地方被选中,之后按一下 >< 完成缩进。

6. 搜索、替换

6.1. 搜索命令

普通模式按下 / 进入命令行模式。/ 后跟要搜索的内容。要查找下一个目标,按下 n 键,要查找上一个目标按下 N 键。

注意: 搜索是从光标处开始向后查找

使用 ? 也可进入命令行模式,使用方法和 / 一样,不过作用是相反的,包括 nN 的作用也是相反的。

被搜索的内容会被标注高亮,取消高亮的方法是:

:nohl

6.2. 替换命令

  • 替换一处内容,将光标定位到要替换的位置,输入 :s/old/new

  • 替换光标所在行内容,输入 :s/old/new/g

  • 替换整个文件匹配内容,输入 :%s/old/new/g

  • 替换整个文件匹配内容并在替换前确认,输出 :%s/old/new/gc,会看到如下信息:

    `replace with __ (y/n/a/q/l/^E/^Y)?

    • y 表示替换
    • n 表示不替换
    • a 表示替换所有
    • q 表示放弃替换
    • l 表示替换第一个并进入插入模式
    • ^E 表示用 Ctrl+e 来滚动屏幕
    • ^Y 表示用 Ctrl+y 来滚动屏幕

也可以使用 :m,ns/old/new/g 替换从 m 行到 n 行的内容。

7. 执行 shell 命令,文件另存为,合并文件和打开多个文件

7.1. 执行 shell 命令

使用 :! + shell 命令执行 shell 命令。

7.2. 文件另存为

a. 另存文件

使用 :w + 新文件名 另存文件。

b. 另存局部内容

按下 v 键进入可视模式。选中要另存为的内容。按下 :,在屏幕出现的提示信息后输入 w + 文件名 另存文件。

7.3. 合并文件

输入 : + r + 文件名 将指定文件内容读取到光标所在位置下一行。

7.4. 打开多个文件

a. 命令

在命令行中使用 -o-O 选项打开多个命令。

vim -o test1.txt text2.txt text3.txt
  • -o 表示垂直并排打开
  • -O 表示水平并排打开

b. 在不同文件间切换

  • Ctrl + w + w 切换到下个文件
  • Ctrl + w + 方向键或 h, j, k, l

c. 退出

  • 退出单个文件用 :q:q!:wqShift + z + z
  • 退出所有文件用 :qa:qa!:wqa