第15章 命令行模式
在前三章中,您已经学习了如何使用搜索命令(/, ?)、替换命令(:s)、全局命令(:g),以及外部命令(!)。这些都是命令行模式命令的一些例子。
在本章中,您将学习命令行模式的更多技巧。
进入和退出命令行模式
命令行模式本身也是一种模式,就像普通模式、输入模式、可视模式一样。在这种模式中,光标将转到屏幕底部,此时您可以输入不同的命令。
有 4 种进入命令行模式的方式:
搜索命令 (
/,?)命令行指令 (
:)外部命令 (
!)
您可以从正常模式或可视模式进入命令行模式。
若要离开命令行模式,您可以使用 <esc>、Ctrl-c、Ctrl-[。
有时其他资料可能会将“命令行指令”称为“Ex 命令”,将“外部命令”称为“过滤命令”或者“叹号运算符”。
重复上一个命令
您可以用 @: 来重复上一个命令行指令或外部命令。
如果您刚运行 :s/foo/bar/g,执行 @: 将重复该替换。
如果您刚运行 :.!tr '[a-z]' '[A-Z]',执行 @: 将重复上一次外部命令转换过滤。
命令行模式快捷键
在命令行模式中,您可以使用 Left 或 Right 键,来左右移动一个字符。
如果需要移动一个单词,使用 Shift-Left 或 Shift-Right (在某些操作系统中,您需要使用 Ctrl 而不是 Shift)。
使用 Ctrl-b移动到该行的开始,使用 Ctrl-e移动到该行的结束。
和输入模式类似,在命令行模式中,有三种方法可以删除字符:
最后,如果您想像编辑文本文件一样来编辑命令,可以使用 Ctrl-f。
这样还可以查看过往的命令,并在这种“命令行编辑的普通模式”中编辑它们,同时还能按下 Enter 来运行它们。
寄存器和自动补全
在编程中,只要能使用自动补全,就尽量不要重复输入。这种思想不仅能节省时间,还能减少打错字的可能。
您可以使用 Ctrl-r 来插入 Vim 寄存器中的文本(就和输入模式中的一样)。如果寄存器 "a 中存储着 "foo" 字符串,运行 Ctrl-r a 就可以插入它。输入模式中的寄存器能做到的一切,同样能在命令行模式中做到。
命令也能使用自动补全。例如,要在命令行模式中自动补全 echo 命令,首先输入 "ec",接着按下 <Tab>,此时您应该能在左下角看到一些 "ec" 开头的 Vim 命令(例如:echo echoerr echohl echomsg econ)。按下 <Tab> 或 Ctrl-n 可以去到下一个选项。按下 <Shift-Tab> 或 Ctrl-p 可以回到上一个选项。
一些命令行指令接受文件名作为参数。edit 就是一个例子。输入 :e 后(不要忘记空格了),按下 <Tab>,Vim 将列出所有相关的文件名。
历史记录窗口
您可以查看命令行指令和搜索项的历史记录(要确保在运行 vim --version 时,Vim 的编译选项中含有+cmdline_hist)。
运行 :his : 来查看命令行指令的历史记录:
Vim 列出了您运行的所有 : 命令。默认情况下,Vim 存储最后 50 个命令。运行 :set history=100 可以将 Vim 记住的条目总数更改为 100。
在命令行模式中,您可以按下 Up 和 Down 键来遍历此历史记录列表。假设您的命令行指令历史记录如下:
按 : 后再按 Up,您可以看到 :s/foo//g。再按 Up 可以看到 :s/foo/baz/g。Vim 向上遍历了历史记录。
类似地,运行 :his / 可以查看搜索记录。运行后,按下Up 或 Down可以遍历此历史记录栈。
Vim 非常聪明,可以区分不同的历史记录。按下:后再按Up 或 Down,Vim 自动显示命令历史记录。按下/后再按Up 或 Down,Vim 自动显示搜索记录。
命令行窗口
历史记录窗口只能显示过往命令行指令,但无法运行它们。但在命令行窗口中,可以边浏览边执行。有三种命令行窗口:
运行 q: 来打开命令行窗口。Vim 将在屏幕底部启动一个新窗口。 您可以使用 Up 或Ctrl-p 键向上遍历,使用 Down 或 Ctrl-n 键可以向下遍历。按下 <Return>,Vim 将执行该命令。按下 Ctrl-c、Ctrl-w c、:quit 可以退出命令行窗口。
类似地,运行 q/ 可以启动向前搜索命令行窗口,运行 q? 可以启动向后搜索命令行窗口。
聪明地学习命令行模式
对比其他三种模式,命令行模式就像是文本编辑中的瑞士军刀。寥举几例,您可以编辑文本、修改文件和执行命令。本章是命令行模式的零碎知识的集合。同时,Vim 模式的介绍也走向尾声。现在,您已经知道如何使用普通、输入、可视以及命令行模式,您可以比以往更快地使用 Vim 来编辑文本了。
是时候离开 Vim 模式,来了解如何使用 Vim 标记进行更快的导航了。
Last updated
Was this helpful?