Vim快捷键

光标移动(Cursor Movement)

命令 作用(解释)
h,j,k,l h表示往左,j表示往下,k表示往右,l表示往上
Ctrl+f 上一页
Ctrl+b 下一页
w, e, W, E 跳到单词的后面,小写包括标点
b, B 以单词为单位往前跳动光标,小写包含标点
O 开启新的一行
^ 一行的开始
$ 一行的结尾
gg 文档的第一行
[N]G 文档的第N行或者最后一行

插入模式(Insert Mode)

命令 作用(解释)
i 插入到光标前面
I 插入到行的开始位置
a 插入到光标的后面
A 插入到行的最后位置
o, O 新开一行
Esc 关闭插入模式

编辑(Editing)

命令 作用(解释)
r 在插入模式替换光标所在的一个字符
J 合并下一行到上一行
s 删除光标所在的一个字符, 光标还在当行
S 删除光标所在的一行,光标还在当行,不同于dd
u 撤销上一步操作
ctrl+r 恢复上一步操作
. 重复最后一个命令
~ 变换为大写
[N]>> 一行或N行往右移动一个tab
[N]<< 一行或N行往左移动一个tab

撤销:u

恢复撤销:Ctrl + r

关闭(Exiting)

命令 作用(解释)
:w 保存
:wq, :x 保存并关闭
:q 关闭(已保存)
:q! 强制关闭

搜索(Search)

命令 作用(解释)
/pattern 搜索(非插入模式)
?pattern 往后搜索
n 光标到达搜索结果的前一个目标
N 光标到达搜索结果的后一个目标

视觉模式(Visual Mode)

命令 作用(解释)
v 选中一个或多个字符
V 选中一行

剪切和复制(Cut and Paste)

命令 作用(解释)
dd 删除一行
dw 删除一个单词
x 删除后一个字符
X 删除前一个字符
D 删除一行最后一个字符
[N]yy 复制一行或者N行
yw 复制一个单词
p 粘贴

窗口操作

命令 作用(解释)
:split 水平方向分割出一个窗口
:vsplit 垂直方向分割出一个窗口
:close 关闭窗口
Ctrl+W 切换窗口, h到左边窗口,j到下方窗口,k到上方窗口,l到右边窗口

多文件切换

  1. 通过vim打开多个文件(可以通过ctags或者cscope)
  2. “:ls”查看当前打开的buffer(文件)
  3. “:b num”切换文件(其中num为buffer list中的编号)
  4. Ctrl+ww——依次向后切换到下一个窗格中
  5. bn
  6. bp

区域选择操作

v 进入字符可视化模式(移动一次选择一个字符)
V 进入行可视化模式
ctrl-V 进入块可视化模式
ctrl-Q
gv 选中前一次可视化模式时选择的文本
o 光标移动到选中文本的另一结尾
O 光标移动到选中文本的另一角落

补充操作:配合% (各种括号前后跳转),行内跳转:fa(到下一个为a的字符上),t(到某个字符前的字符)。大写的F、T是向反方向查找,命令有各种组合:

  • fa → 从当前光标位置到下一个为a的字符处,你也可以fs到下一个为s的字符。
  • t, → 从当前光标位置到逗号前的第一个字符。逗号可以变成其它字符。
  • 3fa → 在当前行查找从当前光标位置起第三个出现的a。
  • FT → 和 ft 一样,只不过是相反方向。
  • img
  • 还有一个很有用的命令是 dt" → 删除所有的内容,直到遇到双引号—— "。

最强操作:**<action>a<object>** <action>i<object>

在visual 模式下,这些命令很强大,其命令格式为

1
<action>a<object>` 和 `<action>i<object>
  • action可以是任何的命令,如 d (删除), y (拷贝), v (可以视模式选择)。
  • object 可能是: w 一个单词, W 一个以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符:"、 '、 )、 }、 ]。

假设你有一个字符串 (map (+) ("foo")).而光标键在第一个 o的位置。

复制代码

1
2
3
4
5
6
vi" → 会选择 foo
va" → 会选择 "foo"
vi) → 会选择 "foo"
va) → 会选择("foo")
v2i) → 会选择 map (+) ("foo")
v2a) → 会选择 (map (+) ("foo"))

复制代码

区域选择后可以进行哪些操作:

  1. 针对高亮显示的文本块,我们可以用命令~进行大小写转换。
  2. 用命令>增加缩进,或用命令<减少缩进。
  3. 我们还可以利用可视化模式,来合并多行文本。J命令可以将高亮显示的文本内容合并为一行,同时以空格来分隔各行。如果不希望在行间插入空格,那么可以使用gJ命令。
  4. 加注释,或者前、后加字符, I(大写i)– [ESC] → I是插入,插入“–”,按ESC键来为每一行生效
  5. 使用g?命令,可以使用rot 13算法来加密高亮显示的文本。针对同一个文本再次执行加密命令,就可以进行文本解密。

在可视化模式下,按下:键就可以对选定范围进行操作。例如:我们先在可视化模式下选中文本,然后执行:write block.txt命令,就可以将文本块写入另一文件中。选择多行,

然后执行:sort命令,则可以对选中的文本进行排序。

在vim下打开终端

注意:仅在vim8.1下可用
使用方法:

1
:term

打开默认的终端
如果是linux,或者使用wsl,

1
:term bash

Ctrl+W/Ctrl+N 将终端设置成normal模式