Vim 学习笔记

1 打开方式

水平分屏(分成上下两个窗格):
:split
或者
ctrl+w s

注意:先按 ctrl 和 w,然后松开,然后再按 s。

垂直分屏(分成左右两个窗格):
:vsplit
或者
ctrl+w v

上面的命令成功执行后,对于分出来的窗格中显示的内容是完全一样的(打开的是同一个文件)。如果想在分出来的窗格中打开其他的文件,则如下:

水平分屏并打开新文件:
:split 文件名

垂直分屏并打开新文件:
:vsplit 文件名

窗格切换:
ctrl+w 上下左右方向键

增加窗格宽度:
ctrl+w >

减少窗格宽度:
ctrl+w <

增加窗格高度:
ctrl+w +

减少窗格高度:
ctrl+w -

2 保存和关闭文件

保存文件:
:w

退出文件:
:q

保存文件并退出:
:wq

另存到一个文件:
:w filename

将第 10 行到 20 行的内容另存到一个文件中:
:10,20 w filename

强制退出文件,不保存任何的修改:
:q!

有时候在编辑一个只读文件时,如果想将该修改应用到这个文件中,则执行:
:w !sudo tee %

其中,

  • w 表示保存文件
  • ! 表示执行外部命令
  • tee 为重定向命令
  • %:在执行外部命令时,% 会扩展成当前文件名;这个 % 区别于替换时的 %,替换时 % 的意义是代表整个文件,而不是文件名

有的配置文件中为这条命令取了一个别名:w!!

3 文件之间的切换

若用 vim 一次打开了多个文件,则可以进行切换。

切换至下一个文件:
:n

切换至上一个文件:
:N

4 函数或头文件跳转

将光标移动到函数调用出,然后 gf

5 翻页操作

下翻一页:
ctrl + f

上翻一页:
ctrl + b

6 定位操作

定位到第 12 行:
12gg

定位到首行:
gg

定位到尾行:
G

将光标移动到前一个单词首部:
b

将光标移动到下一个单词尾部:
e

将光标移动到行首:
^

将光标移动到行尾:
$

7 进入和退出插入的编辑模式

进入插入的编辑模式:
i

进入插入插入的编辑模式,且在当前行的下面插入一个空行:
o

退出编辑模式,进入一般模式:
ESC

8 选择模式

选择多个字符:
v

选择多行:
V

矩形选择:
ctr + v

9 复制操作

复制光标所在的行:
yy

复制光标所在的向下 12 行:
12yy

复制第 9 到 85 行:
:9,85y

复制当前光标所在的位置到行尾:
y$

复制行首到当前光标所在的位置:
y^

若要复制某行中间的内容或某个块的内容:
先退出编辑模式,再将光标定位到某个单词前面,然后按 v 或者 V 或者 ctr + v,接着上下左右选中所需要复制的块区域,然后再按 y

默认情况下的复制操作都是将内容拷贝到 “” 寄存器。若要将内容复制到指定寄存器,则在选中内容后执行:
寄存器名y

可以通过执行:
reg
命令来查看所有寄存器中保存的内容。
其中,”+ 代表系统剪贴板。

10 粘贴操作

将已复制的数据粘贴在光标的下一行:
p

默认情况下的粘贴操作都是将 “” 寄存器中的内容粘贴到指定位置。若要粘贴指定寄存器中的内容,则在选中指定粘贴位置后执行:
寄存器名p

11 删除操作

删除当前行:
dd

删除当前行开始向下的 12 行:
12dd

删除第 9 到 85 行:
:9,85d

删除当前行光标所在的位置到行尾:
d$

删除行首到当前行光标所在的位置:
d^

向后删除一个字符:
x

向后删除 10 个字符:
10x

若要删除某行中间的内容或某个块的内容:
先退出编辑模式,再将光标定位到某个单词前面,然后按 v 或者 V 或者 ctr + v,接着上下左右选中所需要删除的块区域,然后按 d

12 读入另外一个文件中的内容到光标处

:r filename

13 恢复与重做操作

恢复:
u

重做:
ctr + r

14 搜索字符串

向下查找 test 字符串:
/test

注意:是在一般模式下输入 / 进入命令行模式,然后输入所要查找的字符串。

重复前一个查找操作:
n

反向重复前一个查找操作:
N

15 进入和退出替换的编辑模式

将光标移动到要替换的字符处,然后:
r
再输入替换后的字符。

注意:只替换一次。

将光标移动到要替换的字符串的开始位置,然后:
R
再输入替换后的字符串。结束时按 ESC

16 字符串替换

替换每行的第一个 abc 为 efg:
:%s/abc/efg

替换每行的所有 abc 为 efg:
:%s/abc/efg/g

替换光标所在行的第一个 abc 为 efg:
:s/abc/efg

替换光标所在行的所有 abc 为 efg:
:s/abc/efg/g

替换 1 到 5 行的所有 abc 为 efg:
:1,5s/abc/efg/g

s 表示 substitute。

17 自动补全

打出部分单词后,点击 TAB

18 查询函数参数等一些信息

ctrl + n

ctrl + p

19 对齐

v,选择多行,然后 =

20 括号匹配

先将光标放到一个括号上,然后按 %,自动匹配相应的另一个括号。

21 显示或隐藏行号

显示行号:
set number

隐藏行号:
set nonumber

22 粘贴模式

开启粘贴模式:
set paste
关闭粘贴模式:
set nopaste


Reference