在用Vim快捷键但是不太上手,看到一份很好的整理Vim命令合集 校正了部分笔误并测试后整理如下,挂在网上方便查阅。
模式切换

Esc 正常模式

i 插入模式

(除了键入字符,其他命令都需要在正常模式下才能运行)

v 可视模式, 字符选择,会将光标经过的地方反白选择

V 行选择, 会将光标经过的行反白选择


命令历史

:/开头的命令都有历史记录,可以键入:/然后按上下键来获得


导航命令

% 括号匹配


插入命令

i 在当前位置前插入(正常模式下选中的范围前)

I 在当前行的行首插入

a 在当前位置后插入(正常模式下选中的范围后)

A 在当前行的行尾插入

o 在当前行后插入新的一行

OShift+o 在当前行前插入新的一行


查找命令

/text 查找text,回车后出现查找结果,按n键跳转下一个,按N键跳转上一个

?text 查找text,回车后出现查找结果,反向查找,按n键跳转上一个,按N键跳转下一个

:set ignorecase 忽略大小写

:set noignorecase 不忽略大小写

:set hlsearch 高亮显示全部搜索结果

:set nohlsearch 关闭高亮搜索显示

:nohlsearch 关闭当前的高亮搜索显示,但如果再次搜索或按下n/N键,会再次高亮

:set incsearch 逐步搜索模式,对每次输入的结果立刻进行搜索

:set wrapscan 重新搜索


替换命令

r 切换到替换模式,继续输入即可替换当前字符

:s/old/new/ 用new替换当前行中第一个匹配的old

:s/old/new/g 用new替换当前行中所有匹配的old

:%s/old/new/ 用new替换所有行中第一个匹配的old

:%s/old/new/g 用new替换所有行中所有匹配的old

:r1,r2, s/old/new/ 对于r1-r2行进行替换(其他类似)

例子::10,20, s/^/ /g 在10-20行每行前加两个tab空格缩进

ddp 交换光标所在行和其下紧邻的下一行(剪切粘贴原理)

xp 交换当前字符和其后一个字符


移动命令

h 左移一个字符

l 右移一个字符

k 上移一行

j 下移一行

(可以在前面加上数字使用,比如10j就是下移10行)

w 右移一个符号/字符串,光标停在单词词首

b 左移一个符号/字符串,光标停在单词词首

e 右移一个符号/字符串,但光标停在单词词尾

ge 左移一个符号/字符串,但光标停在单词词尾

^ 移动到当前行第一个非空白字符

0home 移动到当前行行首

$ 移动到当前行行尾

3$ 移动到下面3行的行尾

gg 移动到文件头

G 移动到文件尾

fx 将移动到光标后第一个x的位置 3fx将移动到第三个x的位置

Fx 反向查找,移动到光标前第一个x的位置

:r1r1+G 跳到第r1行第一个非空白字符处

Ctrl+e 向下滚动一行

Ctrl+y 向上滚动一行

Ctrl+d 向下滚动半屏

Ctrl+u 向上滚动半屏

Ctrl+f 向下滚动一屏

Ctrl+b 向上滚动 一屏


撤销命令

u 撤销(undo)

Ctrl+r 重做(redo)


删除命令

xdl 删除当前字符

3x 删除当前光标开始向后三个字符

Xdh 删除当前字符的前一个字符

dd 删除当前行

dj 删除当前行以及上一行

dk 删除当前行以及下一行

Dd$ 删除当前字符至行尾

kdgg 删除当前行之前的所有行

jdG 删除当前行之后的所有行

:r1, r2d 删除r1到r2行

:r1, $d 删除r1到最后一行

Jshift+j 删除两行间的空行


拷贝粘贴剪切命令

yy 拷贝当前行

p 在当前光标后粘贴,如果之前用了yy复制,那么在当前行的下一行粘贴

nyy 拷贝当前行到下n-1行,即包括当前行一共复制n行

Shift+p 在当前行之前粘贴

:r1, r2 co r3 将r1-r2行内容复制后粘贴到r3的下一行

:1, $ co \$ 将整个文件内容复制后粘贴到文件尾部

ddp 交换当前行和下一行

xp 交换当前字符和其后一个字符

dd 剪切当前行

ndd 类似nyy,剪切当前行到下n-1行

:r1, r2d 剪切,p即可粘贴(所以删除其实就是剪切)

:r1, r2 m r3 将r1-r2行移动到r3的下一行


退出命令

:wqZZ 保存并退出

:q! 强制退出并忽略更改

:e! 放弃修改,并打开原文件


窗口命令

:split:new 打开新窗口,光标停在顶层的窗口上

:split file:new file 新窗口打开文件

使用:vsplit可以纵向打开窗口

Ctrl+ww 移动到下一个窗口

Ctrl+wj 移动到下方的窗口

Ctrl+wk 移动到上方的窗口

:close 关闭窗口

:q 退出

:only 只保留当前窗口,关闭其他窗口


注释命令

(利用替换命令)

:r1, r2 s/^/#/g 注释r1-r2行(将每行行首替换为#)

:r1, r2 s/^#//g 取消注释

:1, $ s/^/#/g 注释整个文档

:%s/^/#/g 注释整个文档