有时 Vim 命令需要花费太多时间来执行。
典型示例:
gf
命令在网络上具有巨大的路径。最多可能需要 30 秒才能结束。我想在执行过程中中断它。
有没有办法取消命令执行并返回到正常模式(无需杀死 Vim 并重新启动)?
您可以中断它发送 SIGINT (CTRL+C)。
来自文档:
CTRL-C Interrupt current (search) command. Use CTRL-Break on
MS-DOS |dos-CTRL-Break|.
In Normal mode, any pending command is aborted.
如果 Ctrl-C 不起作用并且 vim 根本不响应按键,那么可能是命令/函数创建了一些子进程(通过调用内部的一些外部命令)
所以对我有用的解决方案就是找到这些子进程(在我的例子中,然后杀死它们)
您可以检查 vim 进程是否有任何子进程:
ps -fp $(pgrep vim)
这应该列出 vim 进程及其 pid 和其他信息。把这个pid放入
ps -fp $(pgrep -P pid)
然后您可以从这里终止任何子进程。
kill -9 pid
杀死它们后,Vim 应该返回,除非触发另一个外部命令(然后你可能必须重复该过程)。显然这取决于vim命令功能。曾经一直对我有用。请注意,这些可能始终是自定义命令和函数。 Ctrl-C 应该适用于内置的 Vim 命令,例如搜索、正常模式等。