前言
简单记录一些在使用vim过程中会用到的操作
模式
vim有三个模式,分别是:
- 命令模式
- 编辑模式
- 进入:
[i, I, o, O, a, A, r, R]
- 退出:Esc键
- 命令行模式
- 进入:
[:, /, ?]
- 退出:Esc键
- 作用:查找数据,读取、保存、批量替换字符、退出、显示行号等操作
基本操作
退出&保存
| command |
效果 |
| :q |
退出 |
| :q! |
强制退出,不保存修改 |
| :w |
保存修改 |
| :wq |
保存并退出 |
| ZZ |
保存并退出 |
移动光标
| command |
效果 |
n<space> |
向右移动n个字符 |
n<Enter> |
向下移动n行 |
| + |
移动到非空格符的下一行 |
| - |
移动到非空格符的上一行 |
| [ctrl]+f |
向下移动一页 |
| [ctrl]+b |
向上移动一页 |
| [ctrl]+d |
向下移动半页 |
| [ctrl]+u |
向上移动半页 |
| 0 |
移动到最前面的字符处 |
| $ |
移动到最后的字符 |
| H |
移动到此屏幕最上方一行的第一个字符 |
| M |
到屏幕中间一行的第一个字符 |
| L |
到屏幕最后一行的第一个字符 |
| G |
移动到此文件的最后一行 |
| nG |
移动到第n行 |
| gg |
移动到此文件的第一行 |
查找和替换
| command |
效果 |
| /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,且在替换前显示提示字符给用户确认是否替换 |
| :nohl |
取消反白 |
删除、复制和粘贴
删除
| command |
效果 |
| nx |
连续向后删除n个字符 |
| ndd |
剪切(删除)光标所在的向下n行 |
| dd |
剪切该行 |
| d1G |
剪切光标所在到第一行的所有数据 |
| d$ |
剪切光标所在到最后一行的所有数据 |
| d0 |
剪切光标所在处,到该行的最前面的一个字符 |
| [n]c[k] |
重复删除多个数据,k为方向按键,如5cj为向下删除5,5cl为向右删除5个字符 |
复制与粘贴
| command |
效果 |
| yy |
复制所在一行 |
| nyy |
复制n行 |
| yn |
复制n+1行 |
| y1G |
复制所在行到第一行的数据 |
| yG |
复制所在行到最后一行的数据 |
| y0 |
复制所在的字符到该行行首的数据 |
| y$ |
复制所在的字符到该行行尾的数据 |
| p |
在下一行粘贴 |
| P |
在上一行粘贴 |
其他
| command |
效果 |
| u |
恢复前一个操作,撤销 |
| ctrl+r |
重做上一个操作,对撤销操作而言的撤销 |
| » |
该行向右缩进 |
| « |
该行向左缩进 |
| >[n] |
n行向右缩进 |
| <[n] |
n行向左缩进 |
| . |
重复上一次的操作 |
命令模式切换到编辑模式
| command |
效果 |
| i与I |
i 为从目标光标所在处插入,I 为在目前所在行的第一个非空格符处开始插入 |
| a与A |
a 为从所在的下一个字符处开始插入,A 为从所在行的最后一个字符处开始插入 |
| o与O |
o 为在所在的下一行处插入新的一行,O 为在目前所在处的上一行插入新的一行 |
| r与R |
r 只会替换光标所在的那个字符一次;R 会一直替换光标所在的文字,直到按下Esc为止 |
命令行模式的其它操作
| command |
效果 |
:! [command] |
暂时退出vi到shell执行command的显示结果,如:! ls ~ |
:w [file] |
将编辑的数据保存成另一个文件 |
:f [file] |
在编辑的数据中,读入另一个文件的数据,即将此文件内容添加到光标所在行之后 |
:n1,n2 w [file] |
将n1到n2的内容保存到file文件 |
可视区块
| command |
效果 |
| v |
字符选择,会将光标经过的地方反白选择 |
| V |
行选择, 会将光标经过的行反白选择 |
| [ctrl]+v |
可视区块,可以用矩形的方式选择数据 |
| y |
复制反白的地方 |
| d |
删除 |
| p |
将复制的区块,在光标所在处粘贴 |
| [Esc] |
退出 |
多文件编辑
:r filename # 在光标处,读取(写入)某个文件的全部内容,
多文件编辑
$ vi file1 file2 # 同时打开两个文件
| command |
作用 |
| :n |
编辑下一个文件 |
| :N |
编辑上一个文件 |
| :files |
列出目前这个vim开启的所有文件 |
多窗口功能
多窗口同步显示:修改同步,光标移动不同步
| command |
作用 |
:sp [filename] |
打开一个新窗口, 若有加filename,则表示在新窗口创建一个新文件,否则表示两个窗口为一个文件内容(同步显示) |
[ctrl]+ w + j |
光标移动到下方的窗口 |
[ctrl]+ w + k |
光标移动到上方的窗口 |
[ctrl]+ w + q |
退出,也可用:q或:close |
关键字补全
组合键,要在编辑模式下使用
| command |
作用 |
| ctrl+x -> ctrl+n |
通过目前正在编辑的这个【文件的内容文字】作为关键字,予以补全 |
| ctrl+x -> ctrl+f |
以当前目录内的【文件名】作为关键词,予以补全 |
| ctrl+x -> ctrl+o |
以扩展名作为语法补充,以vim内置的关键词,予以补全 |