vim 是一个文本编辑器. 虽然目前有很多编辑器可选, 但是 vim 很可能是在没有图形界面情况下的唯一选择, 因此还是有必要了解此编辑器.
如果之前没有使用过终端中的文本编辑器, 可能会对 vim 有很多的不适应. 需要说明的是, vim 是为终端设计的编辑器, 这意味着此编辑器在没有鼠标的情况下进行操作. 此编辑器的操作逻辑 (很大程度来来源于 vi) 具有很长的历史, 这一方面导致它的逻辑不太能被新用户接受, 另一个方面也说明这种操作逻辑的健壮性.
三种模式
vim 具有三种模式: 一般模式, 编辑模式和命令模式.
打开 vim 后, 就进入了一般模式, 在这种模式中, 常用的操作就是光标的移动和行的操作, 比如行的复制, 粘贴和删除等.
可以从一般模式进入编辑模式和命令模式, 编辑模式与图形化的编辑器 (比如记事本, 写字板等) 非常相似, 可以进行字符级别的操作.
命令模式的常用操作是搜索, 替换, 读取, 保存和对编辑器的设置 (比如设置行号和缩进) 等操作.
打开, 编辑, 保存, 退出
使用 vim 打开一个文件很简单:
$ vim hello.txt
上面的命令会使用 vim 打开 hello.txt 文件, 如果 hello.txt 存在, 那么将打开该文件; 如果不存在, 那么将创建并打开该文件.
进入 vim 程序后, 就进入了一般模式, 这个时候可以使用按键 h,j,k,l 移动光标, 分别表示光标向左, 上, 下, 右 4 个方向移动.
按键 | 功能 |
---|---|
h | 向左移动光标 |
j | 向上移动光标 |
k | 向下移动光标 |
l | 向右移动光标 |
下面是一个动图示例:
vim 打开文件并移动光标
为了便于读者理解, 动图中终端右侧的提示表示实际的按键.
按 i 键即可进入编辑模式, 也可以使用其他按键:
按键 | 功能 | 按键 | 功能 |
---|---|---|---|
i | 从光标处插入 | I | 所在行第一个非空白字符处插入 |
o | 所在行下面插入新行并在新行插入 | O | 所在行上面插入新行并在新行插入 |
a | 光标处下一个字符插入 | A | 所在行最后字符后插入 |
按 i 键后, 就会进入编辑模式并从光标处开始插入, 这时移动光标需要使用键盘上的箭头按键. 使用 i 进入编辑模式后, vim 窗口左下方会显示 -- INSERT -- 字样, 表示用户正在插入 (编辑) 模式.
对文件修改完成后, 使用 ESC 键返回一般模式.
下面是动图示例:
vim 的插入模式
返回一般模式后, 使用命令模式对文件进行保存.
在一般模式中输入: 即可进入命令模式, 此时 vim 窗口左下方会显示:, 之后输入 w 表示写入文件, 即: w 表示写入文件;:q 表示离开 vim;:wq 表示写入文件后离开 vim.
下面是动图示例:
vim 写入并离开
至此, 我们从一般模式按 i 键到编辑模式, 编辑后按 ESC 键到一般模式, 在命令模式进行保存和离开, 完成了对一个文本文件的编辑.
下面是几个命令模式中常用的命令:
命令 | 功能 |
---|---|
:w | 写入文件 |
:q | 离开 |
:q! | 强制离开 |
:wq | 写入文件并离开 |
:w filename | 将文件另存为 filename 文件 |
:n1 n2 w filename | 将 n1~n2 行另存为 filename 文件 |
:! command | 暂时到 shell 中执行 command 命令 |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
下面是设置显示行号和不显示行号的动图示例:
vim 设置行号
一般模式
如上所述, 在一般模式中, 可以使用 h,j,k,l 移动光标, 分别表示光标向左, 上, 下, 右 4 个方向移动.
下面是一般模式中的常用的操作:
按键 | 功能 |
---|---|
Ctrl + f | 下一页 |
Ctrl + b | 上一页 |
0 | 移动光标至本行开头 |
$ | 移动光标至本行末尾 |
gg | 移动光标到第一行 |
nG | n 为数字,移动光标到第 n 行 |
G | 移动光标到最后一行 |
n<Enter> | n 为数字,光标向下移动 n 行 |
下面是使用 gg 和 G 在行之间移动光标的动图示例:
vim 一般模式中在行中跳转
一般模式中可以对行进行复制, 粘贴和删除的操作, 下面是常用的操作:
按键 | 功能 |
---|---|
yy | 复制光标所在行 |
nyy | n 为数字,复制光标所在行(包含)向下 n 行 |
p | 在光标所在行下面粘贴 |
P | 在光标所在行上面粘贴 |
dd | 删除光标所在行 |
ndd | n 为数字,删除光标所在行(包含)向下 n 行 |
下面是使用 yy 复制, p 粘贴, 在使用 ndd 删除的动图示例:
vim 中的复制, 粘贴和删除操作
还可以使用.(英文句号)键进行重做操作, u 键进行撤销操作.
搜索与替换
在命令模式中进行搜索与替换:
命令 | 功能 |
---|---|
/word | 向下搜索 word |
?word | 向上搜索 word |
n | 搜索下一个 |
N | 反向搜索下一个 |
:n1,n2s/word1/word2/g | n1,n2 为数字,在 n1~n2 行中用 word2 替换 word1,替换时不询问 |
:1,$s/word1/word2/g | 第一行至最后一行(全文)用 word2 替换 word1,替换时不询问 |
:n1,n2s/word1/word2/gc | n1,n2 为数字,在 n1~n2 行中用 word2 替换 word1,替换时询问 |
下面是一个在 vim 中搜索的动图示例:
vim 搜索
区块操作
vim 还支持区块操作:
按键 | 功能 |
---|---|
v | 字符选择 |
V | 行选择 |
Ctrl + v | 区块选择 |
y | 复制区块 |
d | 删除区块 |
下面是区块操作的动图示例:
vim 区块操作
多窗口
vim 支持多窗口操作, 下面是常用的操作:
命令或按键 | 功能 |
---|---|
:sp filename | 横向新窗口打开 filename 文件 |
:vsp filename | 纵向新窗口打开 filename 文件 |
Ctrl + w 之后 [hjkl] | 将光标移动到左、上、下、右侧窗口 |
下面是两个纵向窗口的动图示例:
vim 多窗口操作
来源: http://www.jianshu.com/p/a4549ad9e82b