:q 命令是Vim中使用非常频繁的命令,用于退出当前Vim窗口。

不知道在使用 :q 命令尝试退出Vim的时候,有没有遇到因为错误输成了 q: 导致并没有退出Vim,而是在窗口下方打开了一个新窗口的情况。

通过 q: 命令打开的窗口是Vim命令行窗口 (:h cmdwin)。Vim命令行窗口中的每行内容都对应一条在Vim命令行模式下执行过的Vim历史命令,可以通过设置 history 选项指定要保存的列表命令个数,例如,使用 :set history=20 设置保留最近执行的20条Vim命令行命令。

1. 打开Vim命令行窗口

除了在普通模式下可以使用 q: 打开Vim命令行窗口外,还可以在命令行模式下使用组合键 <Ctrl-f> 切换到命令行窗口中。下表总结了打开命令行窗口的几种方式:

命令 动作
q/ 打开查找命令历史的命令行窗口
q: 打开 Ex 命令历史的命令行窗口
<Ctrl-f> 从命令行模式切换到命令行窗口

假设正在Vim命令行模式下构建一条Ex命令,输入到一半时才意识到需要更强大的编辑能力来辅助完成命令的编写,这时该怎么办呢?

当处于命令行模式下时,可以直接用 <Ctrl-f> 命令切换到命令行窗口中,且已经在Vim命令行上输入的内容会直接在打开的命令行窗口进行显示。

2. Vim命令行窗口操作

Vim命令行窗口除了保存的内容是Vim历史命令列表外,其他操作与一个常规的Vim缓冲区并无不同。可以在Vim命令行窗口中用 kj 在历史Vim命令列表中向上或向下移动,也可以用Vim的查找功能查找某一行,可以在高亮选区上操作,还可以在命令行窗口中切换到插入模式对历史命令进行编辑,甚至还能对命令行窗口中的内容执行 Ex 命令

在Vim命令行窗口中按下回车键时将会把当前行的内容当成 Ex 命令在Vim命令行模式中执行。

在命令行窗口内按回车键 Enter 时,命令行窗口中光标所在行命令将在活动窗口的上下文中执行。所谓活动窗口指的是在打开命令窗口前处于活动状态的那个窗口。当命令行窗口处于打开状态时,Vim并不会提示哪个窗口是活动窗口,如果使用了Vim屏幕分割打开了多个缓冲区,一定要特别谨慎。

3. 退出命令行窗口

命令行窗口处于打开状态时会始终拥有焦点,除非主动关闭命令行窗口,否则无法使用常规的 <Ctrl-w>w 等命令切换到其他窗口。

与关闭普通Vim窗口一样,关闭命令行窗口可以执行 :q 命令。(按回车键执行当前行命令也会自动退出Vim命令行窗口)

4. Vim命令行窗口操作实例

假设正在写一个简单的 Python 脚本,每做出一个修改时,几乎都会依次执行以下两条命令::w (保存文件)、:!python % (执行当前文件)。

在执行了几次这两条命令后发现把这两条命令合为一条后,下次可以从命令历史中选择该完整命令并再次执行,从而简化工作流程。

Vim-cmdwin

上面的Vim教程截图描述的操作为:先在 w 命令行执行 A | 追加一个空格和 | 后按 Esc 退出到普通模式,再执行 J 合并连续两行后获得需要的命令 w | !python % 直接按回车键执行该命令。此后,Vim的历史命令列表中便存在该条命令了,需要的时候直接直接即可。

:关于 :!python % 命令的详细解释,推荐阅读Vim执行shell命令及使用Vim批量更改文件名

嗯,扫一扫就可以找到小女子我啦~