0

我想要实现的是仅在编辑命令行时将 Ctrl-C 绑定到清除行而不发出换行符( à la ipython),同时在命令运行时保持 Ctrl-C 作为中断信号触发器。我正在使用,即 vi 模式行编辑,但我认为它不相关。bindkey -v

作为旁注,我希望此功能不会造成 Ctrl-C 不会中断正在运行的命令的情况。

我在业余时间研究这个,所以我会对任何线索感兴趣。如果我发现一些足够强大的东西,我会把它作为答案发布。

4

1 回答 1

0

.zshrc 中命名TRAPINT的任何函数都会捕获 Ctrl-C 发送的中断信号。在那里,您将需要测试您是否处于插入模式,这可以通过测试${KEYMAP}变量来实现。如果不是,您应该传递父进程的返回值(有关此提示,请参阅此答案)。这将我们引向以下代码段:

TRAPINT() { 
    if [[ "${KEYMAP}" = "viins" -o "${KEYMAP}" = "main" ]]; then
        zle kill-whole-line
        zle reset-prompt
    else
        return ${128+$1}
    fi
}

如果您使用 vi 模式行编辑,这将起作用。它还应该捕获 emacs-mode,其中KEYMAP应该设置为main,尽管我没有测试这个特定的用例。zle reset-prompt有时需要更新显示。

于 2020-12-09T22:42:22.443 回答