Heroyf @ heroyf.com

Vim Shortcuts

Jan 27, 2025 · 5min

个人整理的vim常用关捷健操作

移动光标

命令 / 按键说明
ctrl + a快速移动到 shell 的行头
ctrl + e快速移动到 shell 的行尾
alt + b(esc + b)往左移动一个单词
alt + f(esc + f)往后移动一个单词

编辑命令

命令 / 按键说明
ctrl + w由光标开始,往左删除单词。往行首删
alt + d由光标位置开始,往右删除单词。往行尾删
esc + d由光标位置开始,删除单词,直到该单词结束
ctrl + k由光标所在位置开始,删除右方所有的字符,直到该行结束
ctrl + u由光标所在位置开始,删除左方所有的字符,直到该行开始
ctrl + _撤销操作

vim

多文件操作

命令 / 按键说明
vim file1 file2打开多个文件
:ls列出所有 vim 打开的文件
:b{文件序号}显示第几个序号的文件
:bn进行上一个文件的切换
:bp进行下一个文件的切换

分屏操作

命令 / 按键说明
vim -On file1 file2 ...左右分屏
vim -on file1 file2 ...上下分屏
:sp file上下分屏展示当前文件和新的 file
:vsp file左右分屏展示当前文件和新的 file

分屏后移动光标

命令 / 按键说明
ctrl + w h移动光标到左屏
ctrl + w l移动光标到右屏
ctrl + w j移动光标到下屏
ctrl + w k移动光标到上屏
ctrl + w c关闭当前分屏

vim 退出

命令 / 按键说明
:qa!退出所有的文件,对所有的文件修改都不做保存。
ZZ当你对文件进行了修改,需要保存退出,快速操作

输入

命令 / 按键说明
i在光标所在的字符之前插入需要录入的文本。
I在光标所在行的行首插入需要录入的文本。
a在光标所在的字符之后插入需要录入的文本。
A在光标所在行的行尾插入需要录入的文本。
o光标所在行的下一行行首插入需要录入的文本。
O光标所在行的上一行行首插入需要录入的文本。
s删除光标所在处的字符然后插入需要录入的文本。
S删除光标所在行,在当前行的行首开始插入需要录入的文本。
cw删除从光标处开始到该单词结束的所有字符,然后插入需要录入的文本
caw删除当前的单词,然后插入需要录入的文本

命令模式下set指令

命令 / 按键说明
:set ic用来不区分大小写的查询
:set noic用来区分大小写的查询
:set ff?检查文件编码
:set ff=unix统一设置编码
:set hls设置匹配高亮模式
:set nohls设置匹配不高亮
:nohl临时关闭高亮

文本处理

删除

命令 / 按键说明
:1,2d删除第 1 行到第 2 行
:'<,'>g/^$/d进入可视模式后,输入 : vim 会自动补全为 :'<,'>,这个是可视范围下的操作范围,然后删除所有空行

替换

:{作用范围}s/{目标}/{替换}/{替换的标志}

命令 / 按键说明
:s/zempty/handsome/g将会把当前光标所在行的 zempty 替换成 handsome
:%s/zempty/handsome/g将会把全文中的 zempty 替换成 handsome
:n1,n2s/zempty/handsome/g这里的 n1 和 n2 值得是行号,将会替换掉 n1 到 n2 的所有 zempty 为 handsome.
:'<,'>s/zempty/handsome/g进入可视模式后,输入 : vim 会自动补全为 :'<,'>,这个是可视范围下的操作范围

替换标志

命令 / 按键说明
g全局替换
空替换标志,只替换目标的第一次出现
i大小写不敏感的替换
I大小写敏感
gi全局不区分大小写替换
c表示需要确认,vim 会弹出确认框

别名

命令 / 按键说明
:ab email xxx@gmail.com后续编辑模式下输入 email,将自动替换为 xxx@gmail.com

选中

命令 / 按键说明
aw选中整个单词
va{字符}选中字符包含的整段

执行指令

命令 / 按键说明
:!commandvim 中执行 linux 命令
:r !command将命令的执行结果,添加到文本中

移动光标

命令 / 按键说明
h左
l右
k上
j下
gj去往视觉意义的下一行(有些情况某些行只是展示成了多行,实际还是一行)
gk去往视觉意义的上一行
{n}k向上移动 n 行
{n}h向左移动 n 个单词
ctrl + u向上翻页
ctrl + d向下翻页
w跳转到下一个单词的开头
e跳转到下一个单词的末尾
W跳转到下一个单词的开头,只以空格作为分隔符
E跳转到下一个单词的末尾,只以空格作为分隔符
b跳转到上一个单词
B跳转到上一个单词,只以空格作为分隔符
0移动到开头
$移动到末尾
^移动到本行的第一个不是 blank 字符
A跳转到这一行的末尾插入
I跳转到这一样的开头插入
g_移动到本行最后一个不是 blank 字符
f{字符}移动到本行的目标字符上
{n}f{字符}移动到本行光标处开始的第 n 个 字符为 a 的地方(n 是 1,2,3,4 … 数字)
F{字符}同 f{字符} 一样,光标反方向移动
{n}F{字符}同 {n}f{字符} 类似,光标移动方向同 {n}f{字符} 相反
t{字符}移动到本行的目标字符的前一个字符
T{字符}移动到本行的目标字符的下一个字符
;重复上一条移动的命令
}跳转到下一个段落
{跳转到上一个段落
%跳转到{对应的下一个括号
m{字符}标记某一处位置
'{字符}跳转到某一处位置
gi快速跳转到上一次输入的地方