如何中断耗时过长的 Vim 命令?

问题描述 投票:0回答:3

有时 Vim 命令需要花费太多时间来执行。

典型示例:

gf
命令在网络上具有巨大的路径。最多可能需要 30 秒才能结束。我想在执行过程中中断它。

有没有办法取消命令执行并返回到正常模式(无需杀死 Vim 并重新启动)?

vim
3个回答
43
投票

您可以中断它发送 SIGINT (CTRL+C)。


7
投票

来自文档

CTRL-C      Interrupt current (search) command.  Use CTRL-Break on
            MS-DOS |dos-CTRL-Break|.
            In Normal mode, any pending command is aborted.

0
投票

如果 Ctrl-C 不起作用并且 vim 根本不响应按键,那么可能是命令/函数创建了一些子进程(通过调用内部的一些外部命令)

所以对我有用的解决方案就是找到这些子进程(在我的例子中,然后杀死它们)

您可以检查 vim 进程是否有任何子进程:

ps -fp $(pgrep vim)

这应该列出 vim 进程及其 pid 和其他信息。把这个pid放入

ps -fp $(pgrep -P pid)

然后您可以从这里终止任何子进程。

kill -9 pid

杀死它们后,Vim 应该返回,除非触发另一个外部命令(然后你可能必须重复该过程)。显然这取决于vim命令功能。曾经一直对我有用。请注意,这些可能始终是自定义命令和函数。 Ctrl-C 应该适用于内置的 Vim 命令,例如搜索、正常模式等。

© www.soinside.com 2019 - 2024. All rights reserved.