Mythsman


乐极生悲,苦尽甘来。


Vim基本命令

很久不用vim了,发现什么命令都忘光了,敲起代码来连复制粘贴都不会了,还得用gedit去搞,真的相当蛋疼。这里把常用的命令汇总一下,趁机好好系统的记一下。不看不知道,看了才晓得原来vim还有很多非常炫的特性。

帮助文档

首先,我们得晓得vim的帮助文档。当然man vim 是一个不错的选择,不过他主要是基于在bash中使用,而不是在vim界面中的使用。非常感人的是,vim有一个自带的中文教程(中文!),讲的非常清楚(不过我没耐心看完)。
myths@myths-X450LD:~$ vimtutor

vim的模式

指令模式(任意模式下按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即可使用宏。

执行shell

在行末模式下输入!再输入命令即可:

:!g++ test.cpp