一、编辑命令
vim编辑器具有强大的编辑功能,使用一些特定的命令,可以实现对文本的查找、替换、删除等等功能。主要命令有:
x:删除光标所在处的单个字符
#x:删除光标所在处向右的#个字符
d:删除命令,通常和单词跳转的命令结合使用:
dw:往后删一个单词
db:往前删一个单词
dd:删除光标所在行
de:删除光标所在处至词尾
#dd:删除光标所在行及向下#行
d^:删除光标所在处到行首的所有非空白字符
d$:删除光标所在处到行尾的所有非空白字符
如果是在末行模式下使用d命令,会有更加有趣的效果,因为末行模式支持地址定界,即指定特殊位置,其使用模式为:
起始地址,结束地址d
通常情况下地址表示符有以下几种:
.: 当前光标所在行
$: 最后一行
%:全文
如:
1,7d//删除第一行至第七行
%d//删除全文
1,$d//删除第一行至最后一行
1,+6d//删除第一行到第6行
1,$-2d//删除第一行至倒数第三行
.,+3d//删除当前光标所在行至下数3行(共4行)
p:在当前光标所在行的下方粘贴,它可以粘贴此前删除的内容(类似于剪切命令)
P:在当前光标所在行的上方粘贴
如果之前删除的不是整行,则p在当前光标所在字符的后方粘贴;P在当前光标所在字符的前方粘贴;
只要没有使用wq命令保存文件,所有的编辑命令是可以撤销的,使用u命令,表示undo。默认情况下vim会保存最近50次的操作,故u命令可以撤销最近50次的操作。如果撤销了之后又想反撤销(即撤销此前的撤销操作),可以使用Ctrl+r命令。
y:复制,此命令和删除相似,通常也和跳转命令结合使用:
yy:复制一行
#yy:复制#行
y$:复制光标到行尾
^y:复制光标到行首
使用了y命令后就可以使用p命令来进行粘贴,其用法和上述p命令一致。
c:融合了编辑和转换到输入模式两种功能。
按照前文所述,如果要删除某一行,然后在删除的位置插入一行新的内容,可以先使用dd命令,然后使用O命令,就可以输入内容了。但直接输入两次c命令同样可以完成这样的功能;
如果要删除光标处到行尾的内容,然后转换为输入模式,此前使用的是d+$,然后输入a命令。而使用c+$命令,也能实现此功能。
c命令也可以和跳转命令一起使用,如:
#cc:删除#行并转换为输入模式
二、vim的可视化模式(visual)
在Windows的文本编辑器中,我们可以使用光标选中任意文本来进行操作;事实上在vim中,同样可以使用可视化模式来选择任意文本。这两个命令可以进入可视化模式:
v:选中光标滑过的字符
V:整行选取,选中光标滑过的行
连按两次Esc键,可以从可视化模式回到编辑模式
在可视化模式下选中文本,可以结合c,y,d等命令来修改、复制、粘贴、删除文本,可视化模式对大篇文档的操作非常有效。
三、翻屏操作
之前使用man查看命令帮助时,用b或者空格键来控制翻屏操作,而在vim编辑器中,同样也需要进行翻屏操作,其主要命令有:
Ctrl+f:向文件尾部翻一屏
Ctrl+b:向文件首部翻一屏
Ctrl+d:向文件尾部翻半屏
Ctrl+u:向文件首部翻半屏
↑,k:光标向上移动一行
↓,j,回车:光标向下移动一行
四、分屏操作
在window的word工具里,可以使用分屏的方式来操作文档,即通过窗口—>拆分来拆分某页文档,这样可以将一个文档显示为两屏。事实上,vim也支持这种操作。注意,这里是在同一个文件中进行操作,而不是像上一章节中操作多个文件,其使用方法为:
Ctrl+w,然后按下s键:水平分割
Ctrl+w,然后按下↑↓方向键:在上下两屏中跳转
Ctrl+w,然后按下v键:垂直分割
Ctrl+w,然后按下→←方向键:在左右两屏中跳转
按Esc键进入末行模式,输入q即可退出分屏显示状态
五、文本搜素功能(末行模式下)
和less命令相似,vim编辑器中也可以使用文本搜索功能,其使用方法为:
/keyword:从当前光标所在处向文件尾部搜索keyword
按下回车键后按:
n:下一个 (同查找方向相同)
N:上一个 (同查找方向相反)
?keyword:从当前光标所在处向文件首部搜索keyword
按下回车后按:
n:上一个
N:下一个
在vim编辑器中搜索可以使用模式匹配,即采用正则表达式进行定制搜索。
例如,要查找文件中以d开头,以n结尾,中间含有任意两个字母的字符串,可以输入:
/d[[:alpha:]]\{2\}n进行搜索
上述匹配没有进行精确锚定,如果要精确锚定,可以使用\/
这里顺便复习一下正则表达式的元字符
基本的正则表达式元字符:
.:任意单个字符
[]:指定范围的单个字符
[^]:指定范围外的单个字符
*:匹配其前的字符任意次
\?:匹配其前的字符0次到1次
\{m,n\}:匹配其前的字符至少m次,至多n次
\{m\}:精确匹配字符m次
^:锚定行首
$:锚定行尾
\
\>:锚定词尾
\(\), \1, \2:分组,在后方引用前面匹配到的字符
扩展的正则表达式元字符有:
.;[];[^];*;?;^;$;\和基本正则表达式元字符一致;
+:1次以上
{m,n}:注意没有反斜线了,至少m次,至多n次
{m}:精确匹配m次
a|b|c:a或b或c
():支持分组,但没有反斜线了