Vim 是由Vi 发展演变过来的文本编辑器,因其具有语法高亮显示、多视窗编辑、代码折叠、支持插件等功能,现已成为众多Linux发行版本的标配。
1、Vim 工作模式
Vim 具有多种工作模式。常用的工作模式有:普通模式、插入模式、命令模式。
- 普通模式:可以实现基本的光标移动与大量的快捷键操作。
- 插入模式:可以实现基本的文本编辑功能。
- 命令模式:通过输入特定的命令实现特定的功能,如保存、退出等功能。
输入”Vim 文件名“:如果文件存在,Vim将打开该文件;如果文件不存在,Vim将创建该文件。
提示:使用Vim打开文件时,如果提示:Found a swap file by the name,类似这样的信息代表着有其他进程正在同时编辑该文件,或者由于上次Vim非正常关闭,导致swap文件没有清除导致的,可以将一个以点开始的一个隐藏文件删除,解决类似问题。该隐藏文件与原始文件处于相同目录下,文件名的后缀一般为swap(如.http.conf.swp)
Vim 编辑器默认会进入普通模式,插入模式可以通过以下按键进入:
- a:进入插入模式,后续输入的内容将插入至当前光标的后面。
- A:进入插入模式,后续输入的内容将插入至当前段落的段尾。
- i:进入插入模式,后续输入的内容将插入至当前光标的前面。
- I:进入插入模式,后续输入的内容将插入至当前段落的段首。
- o:进入插入模式并在当前行的后面创建新的空白行。
- O:进入插入模式并在当前行的前面创建新的空白行。
通过Esc键可以回到普通模式。
在普通模式下输入”:“,即可进入命令模式;在”:“后输入命令,可实现特定的功能,如:q! 强制退出编辑器、wq 保存并退出等等。
2、Vim 光标操作
Vim 中最简单移动光标的方式是使用方向键(上、下、左、右)操作,但使用这种方式效率低下,更高效的方式是使用快捷键,所有快捷键均在普通模式下直接使用,如下是常用的快捷键:
h: 光标向左移动一位 | gg:移动光标至文件首行 |
j: 光标向下移动一行 | G: 移动光标至文件末尾 |
k: 光标向上移动一行 | nG:移动光标至文件的第n行 |
l: 光标向右移动一位 | ^|home: 动光标至当前行的首字符 |
W: 光标向右移动一个单词 | $|end: 移动光标至当前行的尾字符 |
nw:光标向右移动n个单词 | fx: 移动光标至当前行的下一个x字符处 |
b: 光标向左移动一个单词 | Fx: 移动光标至当前行的上一个x字符处 |
nb:光标向左移动n个单词 |
3、Vim 编辑文档
在Vim编辑器中编辑文档内容主要有两种常用方式:进入编辑模式操作和快捷键操作。进入编辑模式后,可以通过移动光标的方式进行增加、删除、修改等操作,这种方法是最简单的方式。而快捷键操作方式是在普通模式下输入相应的快捷键实现对应的功能。
x: 删除光标指向的字符 | yy:复制当前行,nyy:复制n行 |
dd: 删除一行 | p: 粘贴至当前行之后 |
ndd:删除n行 | P: 粘贴至当前行之前 |
d$: 删除光标至行尾的内容 d^: 删除光标至行首的内容 | u: 撤销上一步操作,可以多次使用。2个u:撤俩步 U: 取消对当前行所做的所有编辑 |
J: 删除换行符,可以将两行合并为一行 | rx: 将光标当前字符替换为x |
4、Vim 查找&替换
查找:当文档内容很长时,我们可以通过查找快速定位要找的内容,在Vim的普通模式下输入:
- /关键字(/host):实现自上往下的查找功能,n 跳转到下一个匹配的关键字处,N跳转到上一个匹配的关键字处。
- ?关键字(?host):实现自下往上查找功能,n 跳转到上一个匹配的关键字处,N跳转到下一个匹配的关键字处。
替换:进入命令模式完成替换功能:[替换范围] sub/旧的内容/新的内容[/g]
- 替换范围:
-
- 替换范围是可选部分,默认时只对当前行的内容进行替换
- % 在整个文件内容中进行查找并替换
- n,m在指定行数范围内的文件内容中进行查找并替换
- /g”对替换范围内每一行的所有匹配内容都进行替换,省略“/g”时将只替换每行中的第一个匹配内容。
:s/root/admin/ # 将光标当前行第一个出现的root替换为admin,没有则不替换
:s/root/admin/g # 将光标当前行中所有的root替换为admin
:3,5 s/sbin/bin/g # 将第3行至第5行之间的所有sbin替换为 bin
:% s/nologin/fault/g # 将所有行的nologin都替换为fault
5、Vim 命令模式
通过命令模式,输入特定的命令实现保存与退出功能,常见指令如下:
- :q! 不保存并退出
- :wq|:x!|shift + zz 保存并退出
- :x 保存并退出
- :w 保存
- :w b.txt 另存为b.txt
- :e /etc/passwd 打开新的文件进行编辑
- :r /etc/passwd 在当前文件中读取其他文件的内容至当前光标
提示:Vim 提示错误信息E32:No file name时,说明你没有为文件设置文件名,需要在w后跟上文件名称。
另一种保存方式为快捷键操作,在普通模式下输入ZZ,即可实现保存并退出文档。
6、Vim 小技巧
a. 显示行号:在命令行模式下输入 :set number | :set nu
b. 忽略大小写:在命令行模式下输入 :set ignorecase
c. 执行shell命令:执行一条shell指令,不退出Vim编辑器,可以通过“:!{命令}”的方式实现,如,":!ls" 查看当前目录下档案的名称。
d. 自动补齐:如果输入的内容在前面已经出现过,可以通过“Crtl + N"快捷键实现自动补齐。
e. 多视口编辑:当同时编辑多个文档时,分割窗口就尤为重要。在命令模式下输入”:split“,此命令为水平分割窗口,垂直分割可以使用”:vsplit“命令。输入”:close“命令,可以关闭当前窗口。
-
- :split second.txt:分割窗口并打开新的文件。
- Ctrl + w + h:跳转至左边一个窗口
- Ctrl + w + l:跳转至右边一个窗口
- Ctrl + w + j:跳转至上面一个窗口
- Ctrl + w + k:跳转至下面一个窗口