vi/vim 吐血总结 | emacs evil 使用教程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_41104353/article/details/84670177

使用 evil 之前,得了解 vi/vim 的一些基本常识。
命令模式下的游标是一个方块,它的当前位置是指块的最左边。下图中当前游标所在位置是两个 e 的中间。
在这里插入图片描述

模式

命令模式(执行管理任务)

  • 所输入的内容被解释成命令,功能包括
    1. 保存文件、执行命令
    2. 移动游标、剪切、粘贴多行或多个单词、查找、替换
  • 所输入的任何字符被解释成命令
  • 命令模式包含末行模式(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 确认后再替换

撤销

命令模式下

  1. u 撤销上一次编辑
  2. U 当前行恢复到原始状态(撤销对本行的所有操作)
  3. C-r 反反撤销

重复命令

在命令模式输入命令之前,可以先输入一个数字,表示想要执行接下来输入的命令的次数。

  1. 10j 下移 10 行
  2. 10l 右移 10 个字符
  3. 6h 左移 6 个字符
  4. 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

猜你喜欢

转载自blog.csdn.net/sinat_41104353/article/details/84670177