很久不用vim了,发现什么命令都忘光了,敲起代码来连复制粘贴都不会了,还得用gedit去搞,真的相当蛋疼。这里把常用的命令汇总一下,趁机好好系统的记一下。不看不知道,看了才晓得原来vim还有很多非常炫的特性。
首先,我们得晓得vim的帮助文档。当然man vim 是一个不错的选择,不过他主要是基于在bash中使用,而不是在vim界面中的使用。非常感人的是,vim有一个自带的中文教程(中文!),讲的非常清楚(不过我没耐心看完)。
myths@myths-X450LD:~$ vimtutor
指令模式(任意模式下按Esc或Ctrl+[进入) 用来正常情况下的快捷指令,是各个模式之间切换的桥梁
插入模式(指令模式下按i进入) 左下角显示--INSERT-- 实际上就是普通的文本编辑器
可视模式(指令模式下按v进入) 左下角显示--VISUAL--
末行模式(指令模式下按: 或 / 进入,在屏幕最下面可以输入命令)
所有以 行末模式输入的命令都有历史,键入 : / 或?后然后按上下方向键即可翻阅之前的命令。
其实vim可以在bash中一次打开多个文件:
myths@myths-X450LD:~$ vim file1 file2 file3
也可以在vim中打开新的文件:
open foo.txt
也可以用拆分的试图打开新的文件:(不太会用)
split foo.txt
如果一次性打开了多个文件,那么可以用以下命令来切换文件:(上下切换)
:bn
:bp
如果忘记了当前的文件叫啥,可以用如下命令查看当前的文件名:
:arg
(其实在用:w 保存的时候也会在左下角显示文件名)
命令 | 用法 |
---|---|
i | 在当前位置生前插入 |
a | 在当前位置后插入 |
I | 在当前行首插入 |
A | 在当前行尾插入 |
o | 在当前行之后插入一行 |
O | 在当前行之前插入一行 |
一般是灵活使用 i o 即可。
这个非常简单实用!
/text
text是你要查找的内容。。。然后查找下一个只需要按n,查找上一个按N。
或者是?text反向查找(可以不去管他了)
替换光标所在字符可以在指令模式下按r 再按替换的字符即可。
替换字符串:
:s/old/new/
这里表示在当前行用new来替换old字符第一个匹配到的字符
如果需要全局替换,需要输入:
:s/old/new/g
g表示全局替换
匹配的串可以用正则来表示,而且s可以替换为一个区间,比如:
:10,20 s/^/haha/g
表示在10到20行的行首添加haha,非常好理解。
!注意,Vim默认的替换方式是单行替换,也就是说上面的所有替换方法都是对于单行,是指定行的替换,/g也是指在选定行下进行的全局替换,如果是要在全文中进行替换,则需要用%s参数,比如:
:%s/old/new/g
表示在全文中将old 替换成new 。
h 左移 ;l 右移 ;k 上移 ;j 下移;
w 前移一个单词 ;b 后移一个单词;
当然,所有的移动都可以在前面加数字表示移动的距离。
<home> 行首;<end>行尾;
gg 文件头;G 文件尾;
Ctrl + e 向下滚动一行
Ctrl + y 向上滚动一行
Ctrl + d 向下滚动半屏
Ctrl + u 向上滚动半屏
Ctrl + f 向下滚动一屏
Ctrl + b 向上滚动一屏
实用!
u 撤销
Ctrl + r 重做
命令 | 功能 |
---|---|
x | 删除当前字符用 |
dd | 删除当前行用 |
dj | 删除上一行 |
dk | 删除下一行 |
10d | 删除当前行开始的10行. |
D | 删除当前字符至行尾 |
:1,10d | 删除1-10行 |
命令 | 功能 |
---|---|
yy | 拷贝当前行 |
10yy | 拷贝当前后开始的10行 |
p | 在当前光标后粘贴,如果之前使用了yy命令来复制一行,那么就在当前行的下一行粘贴。 |
:1,10 co 20 | 将1-10行插入到第20行之后。 |
ddp | 交换当前行和其下一行,实际上就是删除当前行然后放在下一行的后面 |
在可视模式下,用jklh命令移动即可选择某些行或字符,再按y即可复制。
:1, 10 m 20
将第1-10行移动到第20行之后
命令 | 功能 |
---|---|
:x或 :wq | 保存并退出 |
:q! | 强制退出并忽略所有更改 |
:e! | 放弃所有修改,并打开原来文件。 |
vim竟然可以实现宏功能,微醺。
在指令模式下按p再按一个字母比如a,然后输入想要的指令最后再按q即可录制出宏,保存在的@a里。下次想用的时候只需要在指令模式下按@a即可使用宏。
在行末模式下输入!再输入命令即可:
:!g++ test.cpp