Vim 是从 vi 发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器。
vi 简介
vi 是 Unix 和 Linux 操作系统使用的终端文本编辑器,任何一台安装了 Unix 或 Linux 的机器都会提供这套软件,它是系统管理员手中的得力工具。vim 是 vi 的升级版,它不仅兼容 vi 的所有指令(命令),而且还具有一些新特性。
vi 的操作模式
vi 有三种操作状态:
- 命令模式(command mode)
- 插入模式(insert mode)
- 末行模式(last line mode)
它们的功能如下:
(1) 命令模式:当执行 vi 后,首先会进入命令模式(指令模式),此时输入的任何字符都被视为命令。命令模式用于控制屏幕光标的移动,文本的删除,移动复制某区段,进入插入模式下,或者进入末行模式。
(2) 插入模式:在命令模式下输入相应的插入命令进入该模式。只有在插入模式下,才可做文字数据输入和其它编辑操作,按 ESC 键可回到命令模式。
(3) 末行模式:在命令模式输入某些特殊字符,如 “/”、"?" 和 “:”,可进入末行模式。在该模式下可存储文件或离开编辑器,也可以设置编辑环境,如寻找字符串、列出行号等。
vi 三种工作模式的转换如图:
vi 的进入与退出
进入 vi
若要编辑文件 myfile,执行如下执行即可:
$vi myfile
终端显示 vi 的编辑窗口,进入命令模式。也可以直接输入 vi 创建一个新文件,然后在退出时保存文件或者丢弃。
退出 vi
如果在插入模式下,则先利用 ESC 键返回命令模式,然后可选用下列指令退出 vi。
:q!
离开 vi,并放弃刚才的修改。:wq
保存退出。:ZZ
保存退出。:x
同:wq
:w
保存但不退出。:q
退出 vi,若文件被修改过,则会被要求确认是否放弃修改。此指令可以 w 配合使用。
注意:如果不知道当前处于何种模式,可以多按几次 ESC 键,以便确认进入命令模式。
vi/vim 常用命令
命令模式的常用命令
在命令模式下可以进行文本的编辑工作。使用下列命令,配合一般键盘上的功能键,如方向键、Insert 键、Delete 键等,就可以利用 vi 来处理文本数据了。
光标的移动
命令 | 说明 | 功能键 |
---|---|---|
h | 向左移一个字符 | ← \leftarrow ← |
l | 向右移一个字符 | → \rightarrow → |
j | 向上移一个字符 | ↑ \uparrow ↑ |
k | 向下移一个字符 | ↓ \downarrow ↓ |
0 | 移至该行之首 | Home |
$ | 移至该行之末 | End |
^ | 移至该行的第一个非空白字符处 | |
H | 移至窗口的第一行 | |
M | 移至窗口的中间那行 | |
L | 移至窗口的最后一行 | |
G | 移至该文件的最后一行 | |
nG | 移至该文件的第 n 行 | |
gg | 移至该文件的第一行 | |
w | 跳到下一个单词 | |
b | 跳到上一个单词 | |
{ | 按段移动,上移 | |
} | 按段移动,下移 |
翻屏与滚屏
命令 | 说明 | 功能键 |
---|---|---|
Ctrl+f | 向后翻一屏 | PageDown |
Ctrl+b | 向前翻一屏 | PageUp |
Ctrl+d | 向后翻半屏 | |
Ctrl+u | 向前翻半屏 | |
zt | 光标所在行移动到窗口顶端 | |
zz | 光标所在行移动到窗口中间 | |
zb | 光标所在行移动到窗口底部 |
删除(剪切)与修改
命令 | 说明 | 功能键 |
---|---|---|
x | 删除光标所在的字符 | Delete |
X | 删除光标的前一个字符 | |
dd | 删除光标所在的行 | |
ndd | 删除包括光标所在行的 n 行文本 | |
d0 | 删除从光标前一个字符开始一直到行首的文本 | |
dw | 删除从光标开始的一个单词 | |
D | 删除从光标开始一直到行末的文本 | |
s | 删除光标所在字符并进入插入模式 | |
S | 删除光标所在行并进入插入模式 | |
r | 替换光标所在字符 | |
R | 进入替换状态,替换光标所在字符及以后的字符,按 ESC 退出替换状态 |
复制粘贴
命令 | 说明 |
---|---|
yy 或 Y | 复制光标所在行 |
nyy 或 nY | 复制包括光标所在行开始的 n 行 |
p (小写) | 粘贴到光标的下一行 |
P (大写) | 粘贴到光标的上一行 |
撤销与反撤销
命令 | 说明 |
---|---|
u | 撤销 |
Ctrl+r | 反撤销 |
可视模式
命令 | 说明 |
---|---|
v | 选中文本(按字符移动) |
V | 选中文本(按行移动) |
可视模式可以配合 d
,y
实现对文本块的删除(剪切),复制。
vim 下还支持配合 <
,>
实现对文本块的左右移动,首先使用 v
或 V
选择要移动的部分,然后按 Ctrl+v
选中该文本块,接着可根据需要左移 <
或 右移 >
。
文本行移动(缩进)
命令 | 说明 |
---|---|
>> | 向右移动(缩进) |
<< | 向左移动(缩进) |
> (vim 支持) | 向右移动(缩进) |
< (vim 支持) | 向左移动(缩进) |
重复命令
命令 | 说明 |
---|---|
. | 重复执行上一次的命令 |
退出命令
命令 | 说明 |
---|---|
ZZ | 退出保存,相当于末行模式下的 :wq |
插入模式
所有以下命令都能从命令模式进入插入模式。
命令 | 说明 |
---|---|
i | 从光标所在字符前面开始插入字符 |
I | 从光标所在行的行首开始插入字符 |
a | 从光标所在字符后面开始插入字符 |
A | 从光标所在行的行末开始插入字符 |
o | 光标所在行向下新增一行 |
O | 光标所在行向上新增一行 |
末行模式
查找命令
命令 | 说明 |
---|---|
/exp | 往前查找字符串 exp,n 下一个,N 上一个 |
?exp | 往后查找字符串 exp,n 下一个,N 上一个 |
替换命令
命令 | 说明 |
---|---|
:%s/abc/123/g | 将当前文件中所有的 abc 替换成 123 |
:1,10s/abc/123/g | 将 1 到 10 行的 abc 全部替换成 123 |
退出命令
命令 | 说明 |
---|---|
:q | 退出程序 |
:q! | 强制退出,不保存修改 |
:w | 保存修改 |
:w filename | 将编辑内容存为名为 filename 的文件 |
:wq | 保存退出 |
:x | 若有修改保存,退出程序 |
:wq
强制性 写入文件并退出。即使文件没有被修改也强制写入,并更新文件的修改时间。
:x
写入文件并退出。仅当文件被修改时才写入,并更新文件修改时间,否则不会更新文件修改时间。
其它命令
命令 | 说明 |
---|---|
:set nu | 显示行号 |
:set nonu | 不显示行号 |
:set ff | 查看文件格式 |
:set ff=unix | 修改文件格式为 unix |
:noh | 取消搜索结果高亮 |