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 + nctrl + p

19 对齐

v,选择多行,然后 =

20 括号匹配

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

21 显示或隐藏行号

显示行号: set number

隐藏行号: set nonumber

22 粘贴模式

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


Reference