模式
vim分为三种模式, 分别是一般模式, 编辑模式和指令模式.
一般模式
vim打开或者创建(目录下存在即打开,不存在则创建)一个文件默认进入的模式, 在该模式下可以通过鼠标和键盘查看文件.
编辑模式
在一般模式下按下i, I, o, O, a, A, r, R
其中任意一个就会进入编辑模式, 该模式下可以对文本进行编辑. 此时画面左下方会出现insert
字样表示进入了编辑模式. 按ESC
即会退出编辑模式进入一般模式.
指令模式
在一般模式中输入 :, /, ?
中任意一个即进入指令模式.
常用指令
一般模式下
移动光标
Ctrl + f |
屏幕向下翻动一页, 相当于Page Down 按键 |
---|---|
Ctrl + b |
屏幕向上翻动一页, 相当于Page Up 按键 |
n space |
n 表示数字, 按下数字而后按空格(不用同时, 先后顺序), 光标会右移n 格. |
0 |
移动到当前光标所在行的首字符. |
$ |
移动到当前光标所在行的尾字符. |
n G |
n 为数字, 按下数字后G , 光标移动到第n 行行首. |
gg |
移动到文档第一行行首. 相当于1G . |
n <Enter> |
n 为数字, 输入数字再按回车, 光标向下移n行. |
G |
移动到文档最后一行. |
搜索与取代
/word |
从光标所在之下搜索word字符串 |
---|---|
?word |
从光标所在之上搜索word字符串 |
n |
重复前一个搜索动作. 对于/word 即为向下查找匹配. ?word 为向上查找匹配. |
N |
与n 相反 |
:n1, n2s/word1/word2/g |
在n1到n2之间查找word1, 并将其替换为word2. |
:1,$s/word1/word2/g |
在全文查找word1替换成word2 |
:1,$s/word1/word2/gc |
在全文查找word1替换成word2并在替换前向用户确定. |
:s/world1/word2 |
将光标所在行的第一个word1替换成word2 |
:s/word1/word2/g |
将光标所在整行的word1换成word2 |
搜索后找到的字符串会被高亮显示, 恢复的方式为:noh
即可.
删除复制与粘贴
x /X |
在当前刚标处进行删除操作. x 为向后删除(删除光标所在字符), X 为向前删除(删除光标所在前一个字符). |
---|---|
n x /X |
n 为数字, 删除规则与上述一致, 不过删除数量为n |
dd |
删除光标所在整行. |
ndd |
删除光标所在向下n行(包括光标所在行总共n行). |
d1G |
删除光标所在到第一行所以数据.(包括光标行) |
dG |
删除光标所在到最后一行所以数据.(包括光标行) |
d$ |
删除光标所在到该行最后一个字符(包括光标所在字符) |
d0 |
删除光标所在到该行第一个字符.(不包括光标所在) |
yy |
复制光标所在行. |
nyy |
复制光标所在向下n行. (包括该行) |
y1G |
复制光标所在到第一行所以数据.(包括光标行) |
yG |
复制光标所在到最后一行所以数据.(包括光标行) |
y0 |
复制光标所在到该行第一个字符.(不包括光标所在) |
y$ |
复制光标所在到该行最后一个字符(包括光标所在字符) |
p /P |
p 为将复制内容粘贴到光标所在的下一行. P 为将复制内容粘贴到光标所在上一行. |
J |
将光标所在行与下一行的数据结合成为一行. |
u |
恢复前一个动作. 撤销. |
Ctrl + r |
重复上一个动作. |
. |
重复上一个动作. |
:n1, n2 co n3 |
将n1与n2行之间的内容复制到第n3行(之后). |
:n1, n2 m n3 |
将n1与n2行之间的内容剪切到第n3行(之后). |
一般模式切换到编辑模式按钮说明
i / I |
进入插入模式, i 为从当前光标所在处插入, I 为在 目前所在行的第一个非空格字符处插入. |
---|---|
a /A |
进入插入模式, a 为从目前光标所在下一个字符开始插入. A 为从光标所在行的对后一个字符开始插入. |
o /O |
进入插入模式, o 为在光标处下一行插入新的一行. O 为在光标所在行的上一行插入新的一行. |
r /R |
进入取代模式. r 只会取代光标所在字符一次. R 会一直取代,直到按下Esc |
Esc |
退出编辑模式, 回到一般模式. |
一般模式切换到指令模式的可以命令
:w |
保存 |
---|---|
:w! |
强制保存. (是否真正能够保存取决于用户权限) |
:q |
退出 |
:q! |
强制退出. |
:wq |
保存并退出 |
ZZ |
若文件未改动则直接退出, 否则保存退出. |
:w filename |
另存为 |
:r filename |
打开文档将打开的文档内容添加到当前光标所在行后. |
:n1, n2, w filename |
将n1到n2之间内容另存为. |
:set nu |
设置显示行号. |
:set nonu |
设置取消行号. |
vim暂存机制
很多编辑软件都有恢复功能 ,即当系统因为某些原因而导致编辑中的文件突然退出.可以通过暂存的文件进行恢复.vim当然也存在这样一个机制.当我们使用vim打开一个文件时,在文件所在目录会自动创建一个.filename.swap文件.对原文件的操作会被记录在其中.当突然退出时,.filename.swap文件会帮我们存储下对文件的修改.当我们再次打开是可以选择是否通过该文件恢复对原文件的修改.
注意:当vim默认设置文件中存在如下字段时就不会有暂存机制.
1 | set noswapfile |
配置文件一般在~/.vimrc
.
暂存机制主要适用于两种情况.
- 在编辑文件过程中vim意外终止(在打开文件时.filename.swap文件已经被自动创建, 当正常退出时会自动删除).
- 多人编辑同一个文件.(在你之前有人已经打开了该文件正在编辑.)
当存在暂存文件已经存在而你右对原文件进行操作而异常退出时会生成第二个暂存文件, 以此类推.
当暂存文件存在时打开文件就会提示响应的操作,解释如下:
[O]pen Read-Only |
只读模式打开. |
---|---|
[E]dit anyway |
正常方式打开, 不载入暂存文件. |
[R]ecover |
加载暂存文件. 不过不会自动删除, 完成后需要自己删除. |
[Q]uit |
退出 |
[D]elete it |
不载入暂存文件直接将暂存文件删除 |
A(bout) |
类似与退出. |
在较新版本的vim中该功能似乎以及取消了(默认set noswapfile
), 通过实验发现确实存在一些问题.所以尽量不要使用为好.
vim高级操作
vim区块选择
区块选择用来操作一个区域. 下面是区块选择键含义.
v |
进行区块选择, 按照进过字符选择. 即按v 后,操作光标移动, 将会将移动范围内的内容反白标注选中. |
---|---|
V |
与上面一个类似, 不过是按照行来选取. |
Ctrl +v |
区块选则, 按照长方形区域选取.即按下Ctrl +v 的位置为一个顶点,操纵光标选择第二个顶点. 选择这两个顶点之间的区域. 需要注意的是, 如果复制矩形区域进行粘贴操纵, 赞帖也是按照矩形区域进行的. |
y |
复制选中区域 |
d |
复制选中区域 |
区块选则在实际编程操作中使用是否有用. 区块选择后也可以进入编辑模式进行编辑, 例如将多行代码注释掉(或相反操作)只需要将对于的区块选择, 按I
进入插入模式, 添加注释, 按Esc
退出即可. 过程中按下Esc
会过一会儿才出现, 别着急(一般第一行直接出现).
多档案编辑
我们可以一次打开多个文件进行一起操作. 实现分别打开无法完成的操作,如将一个文件的一部分复制到另一个文件中. 打开多文件方式为vim后面接多个文件名.
例:
1 | $ vim file1 file2 |
多文档编辑操作:
:n |
编辑下一个文件 |
---|---|
:N |
编辑上一个文件 |
:files |
列出当前vim开启的所以文件. |
多窗口编辑
上面的操作需要使用指令进行切换而且无法同时查看两个文件, 这对于编程时是十分不方便的, 要能够保存上面多文档的便捷和查看多文件的舒适多窗口才是王道.
多窗口操作:
:sp filename |
开启一个新的窗口, 如果参数filename则在新窗口打开对于文件,否则打开当前文件. |
---|---|
[Ctrl] +w +j /下箭头 |
按键操作是先[Ctrl] +w , 而后松开按第三个键. 切换到下一个窗口中. |
[Ctrl] +w +k /上箭头 |
切换到上一个窗口中. |
[Ctrl] +w +q |
退出当前窗口. 可以按照这个操作,也可以直接在当前窗口:q |
操作目录
:Ex |
在当前窗口开启目录浏览器. |
---|---|
:Sex |
新打开一个窗口开启目录浏览器. |
未完待续
vim的操作实在是太多了, 要想全部背下来基本是不可能的, 这里仅仅只是记录了基本使用. 还有很多目前还未知的常用指令会继续添加的.