我在 Mac OSX(10.10.5)上使用 iTerm2。
最近遇到一件很奇怪的事情:使用 iTerm2 一段时间后,Ctrl-C 会失效。一开始没问题,只有使用一段时间后才会失效。终端会打印出来,^C
就像是正常按键一样。
我不知道如何重现这种情况。
答案1
我在这里发布一个作品,因为它可能会对某些人有帮助。但我自己不会接受它。
发生这种情况时,kill
当前选项卡中正在运行的进程可能来自不同的选项卡/shell。然后在原始选项卡中执行,reset
一切就会恢复正常。
还是不知道为什么。
答案2
造成这种情况的可能原因之一是您曾经将trap
INT 信号设置为其他信号。
如果将 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+C
到Command+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 会议时才会出现这个问题。