Vi 编辑器由 Bill Joy 在 1976 年编码实现。Vim ( Vi Improved ) 编辑器由 Bram Moolenaar 在 1991 年开发并发布,是 Vi 编辑器的改进版。Vim 编辑器支持 Linux / Mac OS X / Windows 系统,是一款功能强大、灵活高效的文本文件编辑工具。
1 启动 Vim
Windows 系统可安装Git,打开 Git Bash 并运行如下命令来启动 Vim。
Mac OS X 系统可打开终端并运行如下命令来启动 Vim。
vim 启动
vim [filename] 启动并加载文件
filename 是要编辑的文件名,如文件不存在,则创建一个新文件
2 编辑模式
Vim 编辑器有四种编辑模式,分别是:
- 普通模式 ( normal-mode )
- 插入模式 ( insert-mode )
- 命令模式 ( command-mode )
- 可视模式 ( visual-mode )
2.1 普通模式 ( normal-mode )
运行 Vim 后,即进入普通模式,任意输入一个字符后即进入插入模式。在其他模式下时,可通过 Esc 键返回普通模式。
2.1.1 移动光标
k 上移
j 下移
h 左移
l 右移
ctrl+f 在文件中前移一页(相当于 page down)
ctrl+b 在文件中后移一页(相当于 page up)
0 移动到当前行的段头
$ 移动到当前行的段尾
gg 移动到第一行的段首
G 移动到最后一行的段首
ta 移动到本段第一个a前一个字符处
Ta 移动到本段第一个a后一个字符处
fa 移动到到下一个为a的字符处
3fa 在当前行查找第三个出现的 a
Fa 移动到下一个为a的字符处
nG或ngg 移动到到第n段的段首
w 移动到下一个单词开头
b 移动到上一个单词开头
e 移动到下一个单词的结尾
^ 移动到第一个非空字符的位置
g_ 移到本行最后一个非空字符的位置
% 移动到匹配括号移动,如:%(,%[, %{
* 当光标停留在一个单词上,* 键会在文件内搜索该单词,并跳转到下一处
# 当光标停留在一个单词上,# 在文件内搜索该单词,并跳转到上一处
(/) 移动到 前/后句 的开始
{/} 跳转到 当前/下一个 段落的开始
在屏幕中找到需要的一页时,可以用下面的命令快速移动光标:
H 将光标移到屏幕上的起始行
nH 将光标移到屏幕上的第n行
M 将光标移到屏幕中间
L 将光标移到屏幕最后一行
nL 将光标移到屏幕倒数第n行
2.1.2 搜索匹配
/str1 正向搜索字符串 str1
n 继续搜索,找出 str1 字符串下次出现的位置
N 继续搜索,找出 str1 字符串上一次出现的位置
?str2 反向搜索字符串 str2
Vim 中执行搜索匹配可结合 正则表达式 来搜索。
2.1.3 替换和删除
Vim常规的删除命令是 d
、 x
(前者删除 行 ,后者删除 字符 ),例如:
rc 用 c 替换光标所指向的当前字符
nrc 用 c 替换光标所指向的前 n 个字符
5rA 用 A 替换光标所指向的前 5 个字符
x 删除光标所指向的当前字符
nx 删除光标所指向的前 n 个字符
3x 删除光标所指向的前 3 个字符
dw 删除光标右侧的字
ndw 删除光标右侧的 n 个字
3dw 删除光标右侧的 3 个字
db 删除光标左侧的字
ndb 删除光标左侧的 n 个字
5db 删除光标左侧的 5 个字
dd 删除光标所在行,并去除空隙
ndd 删除(剪切) n 行内容,并去除空隙
3dd 删除(剪切) 3 行内容,并去除空隙
d$ 从当前光标起删除字符直到行的结束
d0 从当前光标起删除字符直到行的开始
J 删除本行的回车符(CR),并和下一行合并
Vim常规的替换命令有 c
和 s
,替换命令执行后,通常会由 编辑模式 进入 插入模式:
s 用输入的正文替换光标所指向的字符
S 删除当前行,并进入编辑模式
ns 用输入的正文替换光标右侧 n 个字符
nS 删除当前行在内的 n 行,并进入编辑模式
cw 用输入的正文替换光标右侧的字
cW 用输入的正文替换从光标到行尾的所有字符(同 c$ )
ncw 用输入的正文替换光标右侧的 n 个字
cb 用输入的正文替换光标左侧的字
ncb 用输入的正文替换光标左侧的 n 个字
cd 用输入的正文替换光标的所在行
ncd 用输入的正文替换光标下面的 n 行
c$ 用输入的正文替换从光标开始到本行末尾的所有字符
c0 用输入的正文替换从本行开头到光标的所有字符
2.1.4 复制粘贴
yy 复制当前行到内存缓冲区
nyy 复制 n 行内容到内存缓冲区
5yy 复制 5 行内容到内存缓冲区
“+y 复制 1 行到操作系统的粘贴板
“+nyy 复制 n 行到操作系统的粘贴板
p 小写字母 p,将缓冲区的内容粘贴到光标的后面
P 大写字母 P,将缓冲区的内容粘贴到光标的前面
2.1.5 撤销和重复
u 撤消前一条命令的结果
. 重复最后一条修改正文的命令
2.2 插入模式 ( insert-mode )
在正常模式下执行下列命令即进入插入模式。
a 从光标后插入
A 从当前光标所在行末尾插入
i 从光标所在处插入
I 从当前光标所在行行首插入
o 在光标所在行的下一行增添新行
O 在光标所在行的上一行增添新行
2.3 命令模式 ( command-mode )
在普通模式下输入:
,即进入命令模式,又称为末行模式。用户输入的内容均显示在屏幕的最后一行,按回车键来执行命令。
2.3.1 打开文件
:e path_to_file/filename 打开文件
2.3.2 保存、退出
:w 保存文件
:w file_temp 将文件另存为 file_temp
:wq 保存并退出
ZZ 保存并退出 (在普通模式下)
: q 在未作修改的情况下退出
:q! 不保存强制退出
ZQ 不保存强制退出(在普通模式下)
说明:w 是 write 的缩写, q 是 quit 的缩写
2.3.3 恢复文件
当 Vim 意外退出时,可使用恢复命令 :recover
来恢复文件,也可以在启动Vim时用 -r
选项。
2.3.4 选项设置
:set option 设置选项 option
autoindent 设置该选项,则正文自动缩进
ignorecase 设置该选项,则忽略规则表达式中大小写字母的区别
number 设置该选项,则显示正文行号
ruler 设置该选项,则在屏幕底部显示光标所在行、列的位置
tabstop 设置按 Tab 键跳过的空格数。例如 :set tabstop=n,n 默认值为 8
mk 将选项保存在当前目录的 .exrc 文件中
2.4 可视模式 ( visual-mode )
Vim 的可视模式用于选中一块文本区域并在其上操作。3种不同的可视模式:
- 字符可视化模式
- 行可视化模式
- 块可视化模式
v 进入字符可视化模式
V 进入行可视化模式
Ctrl+v 进入块可视化模式
gv 重选上次的高亮选区
o 切换高亮选区活动端
Esc 进入普通模式
I 或 A 进入插入模式
在可视模式下,很多普通模式的命令也完成相同的功能,例如 h、j、k、l、f{char}、;、,、n/N
。每次移动光标,都会改变高亮选区的边界。