vim 被誉为“编辑器之神”,与之同时代的 emacs 被誉为“神之编辑器”。
目前emac还没入坑,今天把vim的东西总结总结,很长时间不用都彻底忘干净了。
Linux并不自带vim,自带的是vi,vim需要自己安装。vim是公认的vi最好的扩展。安装完vim后可以先运行vimtutor一下,如今的vimtutor有很好的中文版本(系统语言如果装的是中文),非常简单易懂。
一、vim的几种模式
-
正常模式:刚进入vim后的模式,可以使用复制粘贴删除命令。(所有模式的中转模式)
-
命令行模式:shift + ; 进入命令行。ESC退出命令行模式。
-
插入模式:按i、a、o等都可以进入插入模式。ESC退出插入模式。
-
可视模式:按v可以进入可视模式, 在可视模式下,移动光标可以选择文本。按V进入可视行模式, 总是整行整行的选中。ctrl+v进入可视块模式。ESC退出可视模式。
二、启动vim的几种方式
-
vim file:以默认模式打开文件
-
vim -c cmd file: 在打开文件前,先执行指定的命令;
-
vim -r file: 恢复上次异常退出的文件;
-
vim -R file: 以只读的方式打开文件,但可以强制保存;
-
vim -M file: 以只读的方式打开文件,不可以强制保存;
-
vim -y num file: 将编辑窗口的大小设为num行;
-
vim + file: 从文件的末尾开始;
-
vim +num file: 从第num行开始;
-
vim +/string file: 打开file,并将光标停留在第一个找到的string上。
-
vim -o file1 file2:水平分割窗口,同时打开file1和file2
-
vim -O file1 file2:垂直分割窗口,同时打开file1和file2
三、vim的几种方式下的快捷键:
命令行模式:
-
:e file --关闭当前编辑的文件,并开启新的文件。 如果对当前文件未保存,vi会警告。
-
:e! file --放弃对当前文件的修改,编辑新的文件。
-
:e+file -- 开始新的文件,并从文件尾开始编辑。
-
:e+n file -- 开始新的文件,并从第n行开始编辑。
-
:enew --编译一个未命名的新文档。(CTRL-W n)
-
:e -- 重新加载当前文档。
-
:e! -- 重新加载当前文档,并丢弃已做的改动。
-
:e#或ctrl+^ -- 回到刚才编辑的文件,很实用。
-
:f或ctrl+g -- 显示文档名,是否修改,和光标位置。
-
:f filename -- 改变编辑的文件名,这时再保存相当于另存为。
-
gf -- 打开以光标所在字符串为文件名的文件。
-
:w -- 保存修改。
-
:n1,n2w filename -- 选择性保存从某n1行到另n2行的内容。
-
:wq -- 保存并退出。
-
ZZ -- 保存并退出。(注意是大写)
-
:x -- 保存并退出。
-
:q[uit] ——退出当前窗口。
-
:saveas newfilename -- 另存为
-
:Sex -- 水平分割一个窗口,浏览文件系统
-
:Vex -- 垂直分割一个窗口,浏览文件系统
查找:
-
?something: 在前面的文本中查找something;
-
/something: 在后面的文本中查找something;
-
n: 向后查找下一个;
-
N: 向前查找下一个。
替换:
-
: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,$表示行尾。
文字排版:
-
:ce(nter) 本行文字居中
-
:le(ft) 本行文字靠左
-
:ri(ght) 本行文字靠右
插入模式:
插入模式下为代码编辑的模式,也是最常用的模式。vim安装一些插件后不比一些IDE效果差。入门插件的安装可以参考我的另外一个blog即可,https://blog.csdn.net/pianzang5201/article/details/84751153。
可视模式:
VI 中有三种 visual 模式:
-
按 v 进入visual 模式,此时字符是最小单位;
-
按 V 进入 visual line 模式,此时行是最小的操作单位;
-
按 ctrl + v 进入 visual block 模式,此时选中的区域是一个矩形;
使用试图模式选中一部分之后进行,即可直接进行粘贴复制删除操作。
正常模式:
此模式下有太多快捷键了,肯定不需要全部记住。记住最常用的即可:
移动:
-
h或退格: 左移一个字符;
-
l或空格: 右移一个字符;
-
j: 下移一行;
-
k: 上移一行。
-
------------------------------------------------------------------------------------------------------------------
-
b: 前移一个单词,光标停在上一个单词开头;
-
B: 移动到上一个单词开头,忽略一些标点;
-
ge: 前移一个单词,光标停在上一个单词末尾;
-
gE: 移动到上一个单词结尾,忽略一些标点。
-
---------------------------------------------------------------
-
w: 后移一个单词,光标停在下一个单词开头;
-
W: 移动下一个单词开头,但忽略一些标点;
-
e: 后移一个单词,光标停在下一个单词末尾;
-
E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点。
-
------------------------------------------------------------------------------------------------------------------
-
0: 移动到行首;
-
^: 移动到本行第一个非空白字符;
-
$: 移动到行尾;
-
---------------------------------------------------------------
-
H: 把光标移到屏幕最顶端一行;
-
M: 把光标移到屏幕中间一行;
-
L: 把光标移到屏幕最底端一行;
-
---------------------------------------------------------------
-
gg: 到文件头部;
-
G: 到文件尾部。
翻屏:
-
ctrl+b: 上翻一屏;
-
ctrl+f: 下翻一屏;
-
ctrl+u: 上翻半屏;
-
ctrl+d: 下翻半屏;
-
ctrl+e: 向下滚动一行;
-
ctrl+y: 向上滚动一行;
-
zt: 将当前行移动到屏幕顶端;
-
zz: 将当前行移动到屏幕中央;
-
zb: 将当前行移动到屏幕底端。
复制:
-
y: 复制在可视模式下选中的文本;
-
[n]yy or [n]Y: 复制光标以下n整行文本;
-
ygg: 复制光标以上的所有行;
-
yG: 复制光标以下的所有行。
粘贴:
-
p: 在光标之后粘贴;
-
P: 在光标之前粘贴。
删除:
-
d0: 删除(剪切)当前位置到行首的内容;
-
d$ or D: 删除(剪切)当前位置到行尾的内容;
-
dgg: 剪切光标以上的所有行;
-
dG: 剪切光标以下的所有行;
-
d: 删除(剪切)在可视模式下选中的文本;
-
[n] dd: 删除(剪切)1(n)行。
插入:
-
i: 在光标前插入;tip:按10,再按i,进入插入模式,输入=, 按esc进入命令模式,就会出现10个=;
-
I: 在当前行第一个非空字符前插入;
-
a: 在光标后插入;
-
A: 在当前行最后插入;
-
o: 在下面新建一行插入;
-
O: 在上面新建一行插入。
撤销和重做:
-
u: 撤销;
-
ctrl + r: 重做最后的改动;
-
:earlier 4m -- 回到4分钟前;
-
:later 55s -- 前进55秒。
---------------------------------------------------------------------------------------------------
附:以下是vim快捷键的图
---------------------------------------------------------------------------------------------------