vim 常用命令
1.前言
一直觉得 Linux 相比于 windows 系统不知好用了多少倍,第一是 linux 的 terminal
终端,第二是 linux 安装软件太方便了,所以我个人对于 linux 简直是爱不释手。不过现在 Windows10 好像也引入了终端吧。而且德国等好几个国家也在从 Windows 系统切换到 linux 系统,足以说明了 linux 的强大。毕竟我们在用 git 等工具的时候可不想在去安装什么 git 工具。直接几个命令搞定的事情不是很好嘛。
对于会使用 linux 的同学来说,vim 的使用更是家常便饭了,怎样提高 vim 的编辑效率是很有必要的。如果一篇文章很长我们不可能通过上下左右去移动光标到我们想要的位置,对吧。
2.Vim介绍及快捷键
2.1 vim的几种模式
vim总共有四种模式,首次打开处于正常模式中。
-
正常模式(Normal-mode)
启动vim后默认处于正常模式。不论位于什么模式,按下esc
键(有时需要按两下)都会进入正常模式。 -
插入模式(Insert-mode)
在正常模式中按下i
,I
,a
,A
等键,会进入插入模式。现在只用记住按i
键会进行插入模式。在插入模式中,击键时会写入相应的字符。 -
命令模式(Command-mode)
在正常模式中,按下:
(英文冒号)键,会进入命令模式。在命令模式中可以执行一些输入并执行一些vim或插件提供的指令,就像在shell里一样。这些指令包括设置环境、文件操作、调用某个功能等等。
常用的命令有::q
(退出)、:q!
(强制退出不保存)、:w
(保存)、:wq
(保存并退出)。
- 可视模式(Visual-mode)
在正常模式中按下v
,V
,Ctrl
+v
,可以进入可视模式。可视模式中的操作有点像拿鼠标进行操作,选择文本的时候有一种鼠标选择的即视感,有时候会很方便。
我们比较常用的一般是在正常模式,插入模式,命令模式中切换,可视模式其实用到的比较少的。
2.2 Vim快捷键
2.2.1 启动vim命令(test为文件)
命令 | 描述 | 举例 |
---|---|---|
vim -r file | 恢复上次异常退出的文件 | vim -r test |
vim -R file | 以只读的方式打开文件,但可以强制保存 | vim -R test |
vim -M file | 以只读的方式打开文件,不可以强制保存 | vim -M test |
vim + file | 从文件的末尾开始 | vim + test |
vim +num file | 从第num行开始 | vim +4 test |
vim +/string file | 打开file,并将光标停留在第一个找到的string的行首 | vim +/string file |
2.2.2 文档操作命令
命令 | 描述 |
---|---|
:set nu | 显示行号 |
:set nonu | 不显示行号 |
:q | 退出,如果有修改不能退出 |
:q! | 强制退出,但不保存 |
:w | 保存 |
:wq 或 ZZ 或 :x | 保存并退出 |
:saveas newfile.txt | 另存为新的文件newfile.txt |
:f 或 control +g | 显示文档名,是否修改,和光标处于第几行 |
:e | 重新加载当前文档,如果有修改则失败,必须保存或丢弃 |
:e! | 重新加载当前文档,并丢弃已做的改动 |
2.2.3 光标移动(所有操作命令都是在正常模式下)
命令 | 描述 |
---|---|
h 或 Backspace 键 | 左移一个字符 可配合数字使用 如: 2h |
l 或 space | 右移一个字符 可配合数字使用 如: 3l |
j | 下移一行 |
k | 上移一行 |
gj | 移动到一段内的下一行 |
gk | 移动到一段内的上一行 |
+ 或 Enter | 把光标移至下一行第一个非空白字符 |
- | 把光标移至上一行第一个非空白字符 |
w | 前移一个单词,光标停在下一个单词开头 |
e | 前移一个单词,光标停在下一个单词末尾 |
W | 移动下一个单词开头,但忽略一些标点 |
E | 移动到下一个单词末尾,如果词尾有标点,则移动到标点 |
b | 后移一个单词,光标停在上一个单词开头 |
B | 移动到上一个单词开头,忽略一些标点 |
ge | 后移一个单词,光标停在上一个单词末尾 |
gE | 同ge ,不过单词包含单词相邻的标点 |
( 或 { | 向前移动到段落开头 |
) 或 } | 向后移动到段落末尾 |
0 | 移动到行首 |
g0 | 移到光标所在屏幕行行首,针对一行太长的情况 |
^ | 移动到本行第一个非空白字符 |
g^ | 移动到当前屏幕行第一个非空字符处,针对一行太长的情况 |
$ | 移动到行尾 |
g$ | 移动光标所在屏幕行行尾 |
H | 把光标移到屏幕最顶端一行 |
M | 把光标移到屏幕中间一行 |
L | 把光标移到屏幕最底端一行 |
gg | 移动到文件头部 |
G | 移动到文件尾部 |
nG | 移动到文件第n行 |
2.2.4 翻页
命令 | 描述 |
---|---|
ctrl + f | 下翻一屏 |
ctrl + b | 上翻一屏 |
ctrl + d | 下翻半屏 |
ctrl + u | 上翻半屏 |
ctrl + e | 向下滚动一行 |
ctrl + y | 向上滚动一行 |
n% | 到文件n%的位置 |
zz | 将当前行移动到屏幕中央 |
zt | 将当前行移动到屏幕顶端 |
zb | 将当前行移动到屏幕底端 |
2.2.5 查找
命令 | 描述 |
---|---|
/内容 | 在后面的文本中查找内容 ,n 向后查找下一个,N 向前查找下一个 |
?内容 | 在前面的文本中查找内容 ,n 向后查找下一个,N 向前查找下一个 |
/内容/+number | 将光标停在包含内容 的行后面第number行上,n 向后查找下一个,N 向前查找下一个 |
/内容/-number | 将光标停在包含内容 的行前面第number行上,n 向后查找下一个,N 向前查找下一个 |
2.2.6 替换
命令 | 描述 |
---|---|
:s/old/new | 用new替换当前行第一个old |
:s/old/new/g | 用new替换当前行所有的old |
:n1,n2s/old/new/g | 用new替换文件n1行到n2行所有的old |
:%s/old/new/g | 用new替换文件中所有的old |
:%s/^/xxx/g | 在每一行的行首插入xxx,^表示行首 |
:%s/$/xxx/g | 在每一行的行尾插入xxx,$表示行尾 |
所有替换命令末尾加上c,每个替换都将需要用户确认。 如:%s/old/new/gc,加上i则忽略大小写(ignore)。
2.2.7 撤销/重做
命令 | 描述 |
---|---|
[n] u | 取消一(n)个改动 |
:undo 5 | 撤销5个改变 |
:undolist | 你的撤销历史 |
ctrl + r | 重做最后的改动 |
U | 取消当前行中所有的改动 |
:earlier 5m | 回到5分钟前 |
:later 30s | 前进30秒 |
2.2.8 剪切/复制/粘贴
命令 | 描述 |
---|---|
[n]x | 剪切光标右边n个字符,相当于d[n]l |
[n]X | 剪切光标左边n个字符,相当于d[n]h |
yy 或 Y | 复制整行文本 |
y[n]w | 复制一(n)个词 |
y[n]l | 复制光标右边1(n)个字符 |
y[n]h | 复制光标左边1(n)个字符 |
y$ | 从光标当前位置复制到行尾 |
y0 | 从光标当前位置复制到行首 |
y1G 或 ygg | 复制光标以上的所有行 |
yG | 复制光标以下的所有行 |
yaw 或 yas | 复制一个词和复制一个句子,即使光标不在词首和句首也没关系 |
d | 删除(剪切)在可视模式下选中的文本。 |
d$ 或 D | 删除(剪切)当前位置到行尾的内容。 |
d[n]w | 删除(剪切)1(n)个单词 |
d[n]l | 删除(剪切)光标右边1(n)个字符。 |
d[n]h | 删除(剪切)光标左边1(n)个字符。 |
d0 | 删除(剪切)当前位置到行首的内容 |
[n] dd | 删除(剪切)1(n)行。 |
d1G 或 dgg | 剪切光标以上的所有行。 |
dG | 剪切光标以下的所有行。 |
daw 或 das | 剪切一个词和剪切一个句子,即使光标不在词首和句首也没关系。 |
p | 在光标之后粘贴。 |
P | 在光标之前粘贴 |
3. 结语
如果能够熟练掌握以上命令,我相信在使用 vim 编辑文件时的效率至少能提升 5 倍以上。真的不是夸大其词。如果是经常使用 linux 那么 vim 基本命令将是不可或缺的。等你熟练运用的时候就会知道我所言非虚。
加油吧。
天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。