vim命令整理

开始接触Linux时便有听说vim,之后在学习Linux命令的过程中就把vim学了学,但是之后就没怎么用过vim了。直到前段时间学习shell脚本时,一直用vim在终端里写shell脚本,熟悉了一些基础的vim命令,感受到vim编辑代码的高效。

平心而论,我是懒得去把vim配置成IDE的,我还是离不开IDE的……不过在IDE中装个vim插件,同时享受vim编辑的高效和IDE的便捷,我觉得还是很好的,于是觉得自己该补补vim的命令了,特此整理:

vim有多种模式,默认进入是命令模式,之后按a,o,i,c,s等可以进入插入模式,或是按v进入可视模式。按ESC退出插入或可视模式,如果你不知道现在在干什么,按两下ESC能保证你退回到初始的命令模式。

基本操作

按键 命令 备注
:q 退出 quit
:w 保存文件 write
:wq 保存并退出
ZZ 保存并退出
!* 强制执行*命令 比如不保存退出

移动操作

按键 命令 备注
j,k,h,l 上下左右移动光标
ctrl+u 上翻半页 up
ctrl+d 下翻半页 down
ctrl+f 上翻一页 forward
ctrl+b 下翻一页 backward
w 下一个词首 word
W 同上,长跳
e 词尾 end
E 词尾,长跳
b 词首 back
B 词首,长跳
0 行头
^ 行首第一个非空字符 正则表达式
$ 行尾 正则表达式
gg 第一行
G 最后一行
G/gg 第*行
gd 跳到光标所在变量的声明位置 go define
f* 在当前行向后查找*字符,跳至此处 find
F* 在当前行向前查找*字符,跳至此处
t* 在当前行向后查找*字符,跳至此处之前 to
T* 在当前行向前查找*字符,跳至此处之后
; 重复上一个f/F/t/T命令
, 反向重复上一个f/F/t/T命令
# 向上查找光标所在单词
* 向下查找光标所在单词
% 查找匹配括号
( 上一个句子
) 下一个句子

编辑操作

按键 命令 备注
i 从当前光标插入编辑 insert
I 从行首插入编辑
a 从当前光标后插入编辑 add
A 从行尾插入编辑
o 光标下新加一行插入编辑
O 光标上新加一行插入编辑
Esc 退回命令模式
dd 删除光标行 delete
d* 根据*的范围删除
D 删除从光标到行尾的字符 d$
cc 删除光标行并插入 clear
c* 根据*的范围删除并插入
C 删除从光标到行尾的字符并插入 c$
x 删除光标下字符
X 删除光标前字符
s 删除光标下字符并插入
S 删除光标行并插入 cc
r 替换光标下字符 replace
R 进入替换模式
v 进入可视模式 visual
J 合并当前行和下一行 join
u 撤销上一次编辑操作 undo
U 撤销本行的所有编辑操作
ctrl+r 重做上次操作 和u相反

复制粘贴操作

按键 命令 备注
yy 复制当前行
y* 根据*的范围复制
p 在光标后粘贴 paste
P 在光标前粘贴

至于剪切,可以理解为每次删除都把删除的文本放入同一个剪切板,直接p就会把剪切板中的东西粘贴下来。

查找操作

命令 说明
/something 在后面的文本中查找something
?something 在前面的文本中查找something
n 下一个查找结果
N 前一个查找结果

替换操作

:[range]s/old/new/[flags]

range:

  • m,n:m到n行
  • $:最后一行
  • .:当前行
  • %:所有行
  • 默认是当前行

flags:

  • c:替换前进行确认
  • g:替换一行中的所有匹配项,默认只替换第一个
  • i:忽略大小写
  • e:忽略错误

自定义操作

:[range]g/pattern/commmand

对匹配到模式的行执行command命令

其他操作

按键 命令 备注
~ 大小写转换
zc 关闭折叠块 zip close
zo 打开折叠块 zip open
== 排版当前行
\<\< 左缩进
>> 右缩进
ctrl+a 递增光标下数字
ctrl+x 递减光标下数字

使用窍门

  • 大写通常是小写操作的加强或者相反操作
  • 查找替换操作支持正则表达式
  • 几乎所有编辑选择操作都可以在前面键入数字,来重复执行此命令n次
  • 编辑相关操作可和选择操作结合,编辑指定区域
  • 发挥你的想象,命令组合的自由性是vim的特色

vim很强大,这里只列出了很小一部分的快捷键,而且因为我是在IDE中用vim,并没有考虑多文件编辑,多窗口分栏,终端交互等操作。