终端中的 ^S 未发送到 Vim

终端中的 ^S 未发送到 Vim

如果我碰巧在 Vim 中编辑某些内容,我想同时使用 Ctrl+S 和 Cmd+S 来保存文件。

经过一番思考,我想我已经发现^S终端可能被 shell 捕获,因为该终端向进程发送了信号,或者 Vim 正在做一些特殊的事情来不听它。我有一个 perl 脚本,将术语置于原始模式,它可以很好地读取我的映射(^S发送十六进制0x13),但是当我在 VimCtrl+V逐字模式下输入它时什么也没有发生。在裸 zsh shell 中,逐字模式确实显示我正在按下^S。这似乎反驳了存在一些终端程序流控制绑定到此键的命题,因为我能够让 zsh 看到它。

我怎样才能让 vim 识别我的 Ctrl+S?

答案1

^S是 ASCII XOFF 字符。它们与 XON ( ^Q) 一起,是用于软件流控制

它们不是被 shell 拦截的,而是被终端拦截的,拦截^S表示停止终端输出,^Q拦截表示恢复终端输出。

您可以配置您的终端(使用stty -ixon -ixoff)通过关闭软件流控制来忽略它们,但这可能是徒劳的:尝试将其他功能分配给 XON 和 XOFF 是不明智的,因为用户会话中可能有其他东西(远程终端、调制解调器、其他 RS-232 设备)来解释它们。

答案2

stty -ixon(并且stty -ixoff为了达到更好的效果)对 Terminal.app、iTerm2 也做了同样的操作。

相关内容