iterm2:Ctrl-C 有时不起作用

iterm2:Ctrl-C 有时不起作用

我在 Mac OSX(10.10.5)上使用 iTerm2。

最近遇到一件很奇怪的事情:使用 iTerm2 一段时间后,Ctrl-C 会失效。一开始没问题,只有使用一段时间后才会失效。终端会打印出来,^C就像是正常按键一样。

我不知道如何重现这种情况。

答案1

我在这里发布一个作品,因为它可能会对某些人有帮助。但我自己不会接受它。

发生这种情况时,kill当前选项卡中正在运行的进程可能来自不同的选项卡/shell。然后在原始选项卡中执行,reset一切就会恢复正常。

还是不知道为什么。

答案2

造成这种情况的可能原因之一是您曾经将trapINT 信号设置为其他信号。

如果将 INT 上的捕获函数重置为默认值,此问题应该会消失1。您可以这样做:

trap - INT
trap

修复此问题的另一种方法(尽管有些“黑客”)是将以下内容添加到.zshrc或中.bashrc

function reset_trap {
  # Hacky hack because of <function/script-that-sets-trap-INT>
  trap - INT
}

autoload -Uz add-zsh-hook
add-zsh-hook preexec reset_trap

1至少,那/这对我有用!

答案3

这似乎是最明显的问题,所以我想分享我的解决方案。

我也遇到过这个问题,但具体来说仅在使用热键窗口时。我使用 KarabinerElements 重新映射按键的结果。我使用了一个预先构建的规则,称为 ,PC-Style Copy/Paste/Cut它重新映射Ctrl+CCommand+C,但并不总是有效。

我看到热键窗口的行为与常规 iTerm2 窗口不同,原因是这些规则排除了使用以下应用程序 ID 的 iTerm2 "^com\\.googlecode\\.iterm2$"。然而,当热键窗口获得焦点时,它似乎没有报告它具有焦点(使用以下方法验证https://apple.stackexchange.com/a/170699/514960)。这意味着我可以Ctrl+C在 iTerm2 窗口中正常使用,也可以在热键窗口中使用(只要 iTerm2 是最后一个获得焦点的窗口)。

如果任何其他应用程序具有焦点,KarabinerElements 就无法检测到它,因此覆盖仍然会启动。为了解决这个问题,我在 iTerm2 中添加了一个自定义键绑定,这样当它看到时,Left_Command+C它将发送 HexCode 0x03(从https://www.physics.udel.edu/~watson/scen103/ascii.html)。无论 KarabinerElements 是否重新映射键,此功能现在都可以正常工作。我在使用 Ctrl+R 时也遇到了同样的问题,可能还有其他一些我尚未发现的问题!

答案4

我遇到了这种情况,是因为我在 Zoom 中将 CTRL+C 设置为全局快捷键。因此,只有在参加 Zoom 会议时才会出现这个问题。

相关内容