内容来源:超算习堂 (easyhpc.net)
Vim具有6种基本模式和5种派生模式。对于基本模式有:
在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。
在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按a
(append/追加)键或者i
(insert/插入)键。
直接使用vim
命令后进入vim的普通模式,在其他模式下,按下ESC
即可返回普通模式。
在这个模式中,大多数按键都会向文本缓冲区中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。
在普通模式下i, I, a, A
等键即可进入插入模式,插入模式下,按键则会输入。例如我们输入ehpc
这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim的"文本对象"也能和移动命令一样用在这个模式中。
这个模式和无模式编辑器的行为比较相似(Windows标准文本控件的方式)。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式。
在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(:
键),搜索(/
和?
键)或者过滤命令(!
键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。
这和命令行模式比较相似,在使用:visual
命令离开Ex模式前,可以一次执行多条命令。
Vim最大特色是完全使用键盘命令进行编辑。
在普通模式下,可以使用方向键或者h,j,k,l
进行移动,如下表:
按键 | 方向 |
---|---|
h,← | 左 |
l,→ | 有 |
j,↓ | 下 |
k,↑ | 上 |
在行内以移动游标时,可以使用下面的命令来实现:
按键 | 说明 |
---|---|
w | 右移到下一个单词的开头 |
e | 右移到下一个单词的末尾 |
b | 左移到前一个单词的开头 |
0 | 右移到本行的开始 |
$ | 右移到本行的末尾 |
^ | 左移到本行的第一个非空字符 |
可以在相邻页之间移动:
按键 | 说明 |
---|---|
crtl+f | 前移一页 |
crtl+b | 后移一页 |
当我们到达指定页时,可以在页内快速移动:
按键 | 说明 |
---|---|
H | 将光标移到该页的起始行 |
M | 将光标移到该页的中间行 |
L | 将光标移到该页的末尾行 |
Vim提供了很多的移动方式,这里再列举一些大范围移动:
按键 | 说明 |
---|---|
* | 将光标移到该单词的下一个位置 |
# | 将光标移到该单词的上一个位置 |
g | 将光标移到文件的第一行 |
G | 将光标移到文件的末尾行 |
Vim的搜索方法非常简单,只需要输入/
+内容
就可以进行搜索,其命令具体如下:
指令 | 说明 |
---|---|
+str | 向下搜索字符串str |
n | 继续搜索 |
N | 反向搜索 |
?+str | 反向搜索字符串str |
Vim的常规替换命令主要由s
和c
完成,但替换命令之后,会进入插入模式,按下ESC
即可返回普通模式,替换命令部分如下:
指令 | 说明 |
---|---|
s | 用输入的正文替换游标所在的字符 |
ns | 用输入的正文替换游标右侧n个字符 |
c$ | 用输入的正文替换从游标开始到行尾的所有字符 |
c0 | 用输入的正文替换从本行开始到游标的所有字符 |
Vim的删除命令主要由d
和x
完成,如下:
指令 | 说明 |
---|---|
x | 删除游标所在的字符 |
X | 删除游标所在前一个字符 |
dw | 删除游标右的单词 |
dd | 删除游标所在行 |
d0 | 删除光标到行的开始 |
d$ | 删除光标到行的末尾 |
Vim中删除操作其实与剪切操作类似,会将内容复制到内存缓冲区,当然,也可以通过命令自行复制而不删除内容:
指令 | 说明 |
---|---|
yy | 复制游标所在行到缓冲区 |
nyy | 复制n行到缓冲区 |
将内容复制到缓冲区后,可以使用命令将内容粘贴:
指令 | 说明 |
---|---|
p | 粘贴到游标后 |
P | 粘贴到游标前 |
通过指令,可以撤销上一次的操作:
指令 | 说明 |
---|---|
u | 撤销上次操作 |
通过指令,可以重复上一次的操作:
指令 | 说明 |
---|---|
u | 重复上次操作 |
我们知道使用Vim命令后首先进入的是普通模式,要编写内容还是要进入插入模式,除了前面已经提及的一些进入插入模式的方法之外,进入插入模式还可以通过命令:
指令 | 说明 |
---|---|
i | 在游标处插入 |
I | 在行首插入 |
a | 在游标右侧插入 |
A | 在行末插入 |
o | 在当前行后添加一行插入 |
O | 在当前行前添加一行插入 |
当然,也可以尝试在插入模式时移动,但此时h,j,k,l
已不能移动,只能使用方向键进行小幅移动:
按键 | 方向 |
---|---|
← | 左 |
→ | 有 |
↓ | 下 |
↑ | 上 |
进入插入模式后,在编辑内容时,往往需要应用其他命令,这时就需要退出插入模式,进入普通模式,使用命令进行操作:
指令 | 说明 |
---|---|
ESC | 退出插入模式 |
Crtl+[ | 退出插入模式 |
首先,使用vim
进入Vim,要进入命令模式,只需输入:
后,即可进入,此时游标在屏幕最后一行:
在进入Vim之后,如需打开其他文件,命令未e
+文件名
,例如::e ehpc.txt
则可打开ehpc.txt文件
编辑之后,我们可以使用命令w
保存文件,也可以另存为其他文件::w other-ehpc.txt
退出Vim时,如果未作修改,需要使用q
进行退出,如果有修改内容,但不保存,则可以使用q!
强制退出,如果想要保存内容,并退出,可以使用命令wq
。
命令模式下,我们可以直接输入行号进行跳转:: n
:跳转到第n
行通过对行号的使用,我们可以结合其他命令做到:
:nw 文件名
将n
行写入文件:m,nw 文件名
将m
到n
行写入文件:m,.w 文件名
将m
到当前行写入文件:.,$w 文件名
将当前行到最后一行写入文件前面指出了可以使用e
打开文件,w
写文件,Vim还有更多的文件操作:
:r 文件名
读取文件并插入到游标之后:f 文件名
重命名文件:f
输出当前文件名称和状态 Name and status of the current fileVim除了在普通模式下能够进行替换操作,命令模式下也可以进行替换操作:
:%s/str1/str2/
用str2
替换行中首次出现的str1
g
参数可以达到替换所有的操作::s/str1/str2/g
用str2
替换行中出现的str1
:1,$ s/str1/str2/g
用字符串 str2
替换正文中所有出现的字符串str1
上述操作也可以通过:g/str1/s//str2/g
实现通过:recover
可以恢复意外退出而没有保存的文件
通过:set
命令可以设置选项,比如:
选项 | 说明 |
---|---|
autoindent | 自动缩进 |
number | 显示行号 |
ignorecase | 忽略正则表达式的大小写 |
ruler | 显示游标位置 |
Vim中可以使用命令进行分屏操作:
命令 | 说明 |
---|---|
split ,sp | 水平分屏 |
vsplit,vsp | 垂直分屏 |
也可以在启动Vim时分屏,在启动时加入参数:vim -On file1 file2...
打开 file1 和 file2 ,垂直分屏vim -on file1 file2...
打开 file1 和 file2 ,水平分屏各屏幕间移动需要使用快捷键:
命令 | 说明 |
---|---|
Ctrl +w+h | 当前屏的左分屏 |
Ctrl +w+l | 当前屏的右分屏 |
Ctrl +w+j | 当前屏的下分屏 |
Ctrl +w+k | 当前屏的上分屏 |
可以通过Vim进行不同文件之间的比较,在命令行中,可以直接输入vimdiff file1 file2
即可在Vim里分屏显示两个文件的差异。在Vim内,也可以通过命令diffsplit file
与其他文件进行比较。
报错处理: