使用 evil 之前,得了解 vi/vim 的一些基本常识。
命令模式下的游标是一个方块,它的当前位置是指块的最左边。下图中当前游标所在位置是两个 e 的中间。
文章目录
模式
命令模式(执行管理任务)
- 所输入的内容被解释成命令,功能包括
- 保存文件、执行命令
- 移动游标、剪切、粘贴多行或多个单词、查找、替换
- 所输入的任何字符被解释成命令
- 命令模式包含
末行模式
(last line mode / 指令列命令模式)
末行模式
末行模式在命令模式下输入 :
进入。由于此时光标移动到最后一行,因此得名。
插入模式(向文件中输入文本)
键入所有内容被认为是文本输入。
在命令模式下输入以下命令将进入插入模式。没有进入插入模式的会注明。
命令 | 结果 |
---|---|
i | 在当前游标位置之前 插入文本 |
I | 在当前行的开始处 插入文本 (非空字符的行首) |
a | 在当前游标位置之后 插入文本 |
A | 在当前行的结尾处 插入文本 |
o | 在当前行下面新建一行 |
O | 在当前行的上面新建一行 |
s | 删除游标后 的一个字符 |
S | 删除游标所在的行(删除当前行) |
r | 替换 (覆盖) 当前游标位置之后的一个字符,然后进入命令模式 |
R | 替换 (覆盖) 当前游标位置及后面的若干文本(进入替换模式 ) |
cc | 删除当前行内容 |
cw | 删除游标所在位置到单词末尾 |
ch | 删除游标位置之前的一个字符 |
cl | 删除游标位置之后的一个字符 |
cj | 删除当前行和下一行 |
ck | 删除当前行和上一行 |
可视模式
这个一开始不必掌握。
在命令模式下输入以下命令进入可视模式
命令 | 结果 |
---|---|
v | 逐个字符选择文本 |
V | 逐行选择文本 |
C-v | 按照块的方式选择文本(忽视行,可以理解为面向列) |
gv | 重选上次的高亮区域 |
高亮选区由两个断点确定:一个固定的端点,一个活动的端点。
字符 o
可以在不同的的端点之间来回的切换。
当我们选中了一片高亮区域后,可以使用如下命令对高亮区域进行操作:
命令 | 效果 |
---|---|
d | 剪切选中文本 |
c | 修改选中文本 |
r | 替换选中文本 |
I | 在选中文本前插入 |
A | 在选中文本后插入 |
gu | 选中区域转为小写 |
gU | 选中区域转为大写 |
g~ | 大小写互调 |
> | 向右缩进一个单位 |
< | 向左缩进一个单位 |
模式间的切换
任何模式下使用 ESC
将退回到命令模式,实在不行摁两下。
移动
操作单位 | 命令 | 效果 | 说明 |
---|---|---|---|
字符 | h l |
左移一个字符 右移一个字符 |
|
单词 | w/W b/B e/E |
移到下一单词的开头 移到上一单词的开头 移到光标所在单词末尾 |
W、B、E 命令操作的单词是以空白字符(空格、Tab)分隔的字串 比如字符串 “str1-str2 str3-str4” 对 W、B、E 命令来说是两个单词,而对 w、b、e 命令来说则是四个单词。 |
行 | j k 0 ^ $ :n nG n+ n- |
下移一行 上移一行 移到当前行开头 移到当前行的首个非空字符 移到当前行末尾 移动到第 n 行 移动到第 n 行 从光标当前行下移 n 行 从光标当前行上移 n 行 |
0 为数字零(zero) |
句子 | ) ( |
移动到当前句子的末尾 移动到当前句子的开头 |
句子指以 ”.”、”?” 和 ”!” 结尾,后面至少有一个空格或换行符的字符串 |
段落 | } { |
移动当前段落的末尾 移到当前段落的开头 |
|
屏 | H M L |
移动到屏幕的第一行 移动到屏幕的中间一行 移动到屏幕的最后一行 |
|
页 | C-f C-b C-u C-d |
向前滚动一页 向后滚动一页 向前滚动半页 向后滚动半页 |
|
文件 | G gg :0 : $ |
移动到文件末尾 移动到文件开头 移动到文件第一行 移动到文件最后一行 |
复制、粘贴和删除
以下命令都是在命令模式下进行,并且执行之后还在命令模式
复制
操作单位 | 命令 | 效果 |
---|---|---|
字符 | 没意义。要实在像复制的话,可以进入可视模式实现。 | |
单词 | yw | 复制当前单词 |
行 | yy | 复制当前行 |
剪切
操作单位 | 命令 | 效果 |
---|---|---|
字符 | x X |
剪切游标位置后一字符 (相当于 DELETE) 剪切游标位置前一字符 (相当于 BACKESPACE) |
单词 | dw | 剪切当前游标位置至下一个单词前的字符 |
行 | dd D d0 d$ |
剪切游标所在的行 从游标位置开始剪切到行尾 从游标位置剪切至行首 从游标位置剪切至行尾 |
用 v 进入可视模式后,选中文本之后可以按 y 进行复制,如果按 d 就表示剪切。
粘贴
命令 | 说明 |
---|---|
p | 将复制的单词粘到游标后面 复制后的行粘到游标所在行下面 |
P | 将复制的单词粘贴到游标前面 复制后的行粘到游标所在行上面 |
删除
删除后改变当前模式的命令可以参考 插入模式
小节
操作单位 | 命令 | 效果 |
---|---|---|
字符 | x X |
剪切游标位置后一字符 (相当于 DELETE) 剪切游标位置前一字符 (相当于 BACKESPACE) |
单词 | dw | 剪切当前游标位置至下一个单词前的字符 |
行 | dd D d0 d$ J |
剪切游标所在的行 从游标位置开始剪切到行尾 从游标位置剪切至行首 从游标位置剪切至行尾 合并游标所在行及下一行为一行 |
其他命令
功能 | 命令 | 效果 |
---|---|---|
重复操作 | . |
重复上次操作 |
交换相邻字符或行 | xp ddp |
交换光标位置的字符和它右边的字符 交换光标位置的行和它的下一行 |
大小写转换 | ~ guw gUw guu gUU g~~ |
将光标下的字母大小写反向转换 将光标所在的单词变为小写 将光标所在的单词变为大写 光标所在的行所有字符变为小写 光标所在的行所有字符变为大写 光标所在的行所有字符大小写反向转换 |
搜索和替换
搜索
下面的 前 是指 h 的方向
命令 | 说明 |
---|---|
/ | 从当前位置向后搜索 |
? | 从当前位置向前搜索 |
n | 搜索下一个 |
N | 反向搜索下一个 |
* | 在文件中向后搜索当前光标所在的单词 |
# | 在文件中向前搜索当前光标所在的单词 |
显示搜索历史
q/
或 q?
替换
命令 | 说明 |
---|---|
:s / 被换单词 / 新单词 / | 替换光标所在行的第一个被换单词 |
:s / 被换单词 / 新单词 / g | 替换光标所在行的全部被换单词 |
:x,ys / 被换单词 / 新单词 / | 在 x 和 y 行之间替换每一行的第一个被换单词 |
:x,ys / 被换单词 / 新单词 / g | 在 x 和 y 行之间替换全部被换单词 |
:%s/被换单词/新单词/ 替换每一行的第一个被换单词
:%s/被换单词/新单词/g 替换每一行中所有被换单词
如果我们想要替换的字符串中包含 / 怎么办呢?
此时我们可以使用分隔符 # 来代替 分隔符 /
:s#vivian/#sky/#
替换当前行第一个 vivian/ 为 sky/
:%s+/oradata/apras/+/user01/apras1+
(使用 + 来 替换 / )
将 /oradata/apras/ 替换成 /user01/apras1/
为了防止替换错了,我们可以在替换前加个提醒
:1,$s/misspelled/spelled correctly/gc
:1,$s/misspelled/spelled correctly/c
c 确认后再替换
撤销
命令模式下
u
撤销上一次编辑U
当前行
恢复到原始状态(撤销对本行的所有操作)C-r
反反撤销
重复命令
在命令模式输入命令之前,可以先输入一个数字,表示想要执行接下来输入的命令的次数。
- 10j 下移 10 行
- 10l 右移 10 个字符
- 6h 左移 6 个字符
- 3dd 删除三行
退出
命令 | 说明 |
---|---|
:q | 如果修改文件,vi 询问用户是否保存文件,不保存则退出 vi,否则不能退出。 |
:w | 保存当前文件。如果用户对当前文件没有写权限,不能保存文件并收到一条错误消息。 |
:wq | 保存并退出,与: wq 相同 |
:q! :w! :wq! |
! 表示直接执行命令,不提供保护措施,不考虑命令是否执行成功。 |
ZZ | 保存并退出,与: wq 相同 |
ZQ | 无条件退出,与: q! 相同 |
:x | 保存并退出 |
:w filename | 将编辑内容另存到文件 filename 中。启动 vi 时未指定文件名,须用此命令保存编辑内容到文件中 |
:m,nw filename | 将 m 行到 n 行部分的内容保存到文件 filename 中 |
:m,nw >> filename | 将 m 行到 n 行的内容添加到文件 filename 的末尾 |
:e! | 打开文件的上一次成功保存的版本。 |
参考
https://www.ibm.com/developerworks/cn/linux/l-cn-tip-vim/index.html
https://blog.csdn.net/ii1245712564/article/details/46960387#commentBox
https://www.cnblogs.com/afant/archive/2009/03/11/1408745.html
https://blog.csdn.net/netdxy/article/details/50553543