Heroyf @ heroyf.com

Vim Shortcuts

Jan 27 · 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{字符}:选中字符包含的整段

执行指令

:!command:vim 中执行 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:快速跳转到上一次输入的地方