1.vi和vim简介
vi是众多Linux众多文本编辑器的一种,学习vi的原因有以下几点:
- 所有的Unix-like系统都会内置vi文本编辑器,具有广泛的适用性,
- 很多软件的编辑接口会主动调用vi
- vim可以编写程序,可以主动的以字体和颜色来分辨语法
- 程序简单
vim是vi的高级版本,大多数Linux系统已用vim替代vi。
vim编辑器具有三种模式:一般命令模式(command mode)、编辑模式(insert mode)和命令行模式(command-line mode)。其中,一般命令模式为基础模式,文件打开默认为一般命令模式,并且,只有一般命令模式能与剩下两个模式相互转换,而剩下两个模式之间不能相互转换。下面简单介绍三种模式的常用命令:
2.常用命令
一般命令模式:
[Ctrl] + [f] | 向下翻一页,相当于[Page Down] |
---|---|
[Ctrl] + [b] | 向上翻一页,相当于[Page Up] |
num+[space] | num表示数字,space表示空格,光标向后移动num个字符 |
0或[home] | 移动到这一行最前面 |
$或[end] | 移动到这一行的最后 |
G | 移动到文件的最后一行 |
num+G | 移动到文件的第num行 |
gg | 移动到文件的第一行 |
num + [enter] | 向下移动num行 |
/word | 在光标之下查找word(只找一个) |
?word | 在光标之上查找word(只找一个) |
n | 向相同顺序继续查重,如/word之后+n是继续向光标之下方向查找 |
N | 同上,但是向相反方向 |
:n1,n2s/wprd1/word2/g | 在n1和n2行之间,查找word1并替换为word2 |
:1,$s/word1/word2/g | 同上,但是在第一行和最后一行之间查找 |
:1,$/word1/word2/gc | 同上,但在替换时增加询问 |
x/X | x相当于[delete],X相当于[Backspace] |
dd | 剪切光标所在那一行 |
yy | 复制光标所在那一行 |
num+x/dd/yy | 以上操作均可以在操作之前加上num,表示操作num行 |
p/P | p为向光标所在行之后粘贴,P为向光标所在行之前粘贴 |
u | 恢复上一个操作,类似[Ctrl] + z |
[Ctrl] + r | 重做上一个操作 |
. | 小数点,重复上一个操作 |
编辑模式
在一般命令模式下,按下【i,I,o,O,a,A,r,R】中任意一个字母之后进入编辑模式,在编辑模式中,按下[ESC]退回。
i 和 I | 进入【插入模式】 i为从当前光标所在处插入,I为在当前行的第一个非空格字符处插入 |
a 和 A | 【插入模式】 a为从当前光标的下一个字符插入,A为从光标所在行的最后一个字符插入 |
o 和 O | 【插入模式】 o为在在光标所在处的下一行插入新的行,O为在上一行插入新一行 |
r 和 R | 【替代模式】 r只会替代一次,R会一直替代到摁下esc为止 |
命令行模式
在一般命令模式下,摁下":"进入命令行模式,esc返回
:w | 保存 |
:q | 退出vim |
:wq | 保存后退出 |
ZZ | 保存后退出 |
:w [filename] | 另存为 |
:set nu | 显示行号 |
:set nonu | 取消行号 |
3.vim的缓存、恢复与打开时的警告信息
vim具有恢复功能,当vim被意外关闭时,可以通过特别的机制将未保存的数据救回来。
vim才用缓存的机制,当我们在使用vim对文件进行编辑时,vim会在当前目录下建立一个.filename.swp的文件。如果正常结束编辑,那么该文件会被自动删除;而如果vim被意外终止,那么该文件就会被保留下来,当你再次对【filename】文件进行编辑时,由于.swp文件的存在,vim会对你发出警告。
![](https://i-blog.csdnimg.cn/blog_migrate/fc6e9d2972a321bda30364733086f911.png)
在警告中,vim主动为你分析缓存未被主动删除的原因
(1)可能有其他人或程序同时在编辑这个文件。
解决方法是让他们终止编辑或者以只读方式打开
(2)vim被不正确终止
- 如果你需要这个缓存文件的内容,那么摁下【R】,采用缓存文件覆盖当前文件。需要注意的是,之后缓存文件在此情况下不会自动删除,你需要手动删除.swp文件。
- 如果你不需要这个缓存文件,那么摁下【D】直接删除就可以进入原来的文件。
- 摁下【E】则是在不删除缓存文件的情况下打开原来的文件。
4.vim的其他功能
可视化区块(visual block)
不同于Windows只能按整行复制,Linux中的vim可以按矩形复制
![](https://i-blog.csdnimg.cn/blog_migrate/99f3ff4bc032125710fc99c1fd920485.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d3fd18409bc16e0f6be059f874415fc7.png)
当摁下【Ctrl】+ v时,进入可视化区块复制,即可选中光标起始与终止位置为对角线的矩形,摁下 y 复制,摁下 d 删除,摁下 p 粘贴
多文件编辑
vim的多个窗口通常是独立的,无法在file1复制之后在file2粘贴,所以可以采用多文件编辑模式:
通过【vim file1 file2】进入多文件编辑模式。此模式下,在file1复制的内容可直接在file2粘贴。
使用【:files】命令可以查看同时编辑的文件有哪些
采用【:n】命令切换下一个文件,【:N】切换上一个文件
多窗口模式
在某些情况下,需要同时查看多个窗口
在vim中,在命令行模式下,采用【:sp filename】可以在保留当前文件窗口的条件下打开另一个文件窗口
【[ctrl] + w + [↑]】切换上一个窗口,【[ctrl] + w + [↓]】切换下一个窗口,【[ctrl] + w + q】终止当前窗口
关键字补全
vim的关键字补全键为【[ctrl] + x】+
- [ctrl]+x -> [ctrl]+n : 采用当前文件的文本内容为基础进行补全。如图,当我在文件中已输入”include“和“int”时,我再输入in进行补全时,vim会提示我是否为“include”和“int”中的一个
- [ctrl]+x -> [ctrl]+f : 采用目录中的文件名进行补全。如图,当我输入ma时,vim用目录中的文件名提示
- [ctrl]+x -> [ctrl]+o :根据文件的后缀名进行补全。