我可以删除 shell 中的 ctrl-z 键绑定吗?

我可以删除 shell 中的 ctrl-z 键绑定吗?

这个问题的背景:我目前必须通过 ssh 在终端上完成很多工作,而且我经常使用 screen。因为我习惯使用 ctrl-a 转到行首,所以发现 screen 命令的 ctrl-a 键绑定非常烦人,所以我将其更改为 ctrl-z。唯一的问题是,当我在 Matlab 中时,我认为我在 Screen 中,但实际上不是,按 ctrl-z 会立即终止我的 Matlab 会话,因为 ctrl-z 是 *nix 中暂停进程的键绑定。

所以问题是:我可以删除 shell 中 ctrl-z 的键绑定,以便它不再暂停进程吗?

我的 shell 是 OSX 上的 terminal.app。

答案1

绑定^Z不是在 shell 中配置的,而是在你的终端电话,这是一种伪设备,可让您与物理终端或如今常见的终端仿真程序进行通信。TTY 带有一些设置,可告诉内核如何对设备或仿真器报告的键盘输入做出反应。

使用以下命令更改设置stty

stty susp "^P"

stty接受设置名称及其值;在本例中,设置名称为susp暂停进程的键,值是组合键,例如^P。输入stty -a或参考man stty获取可用设置的列表。

答案2

你可以将你的 matlab 包装在一个名为matlab.sh如下的脚本中:

#!/bin/sh
trap "" TSTP
/path/to/matlab-executable

这将忽略通常由 Ctrl-Z 发送的 TSTP 信号。

答案3

另一种可能性是为屏幕选择不同的转义字符。

我使用空字符。我的 中有以下内容$HOME/.screenrc

escape ^@^@

空字符通常可以输入为Ctrl-Space,这非常容易输入。当然,如果我需要向程序发送一个实际的空字符(例如,它set-mark-command在 Emacs 中被绑定),我只需输入Ctrl-Space两次。

(当我使用无法发送空字符的设备或终端仿真器时,这有时会导致问题,但这种情况很少见。)

另一种可能性是Ctrl-]

escape ^]^]

在美国键盘上输入也很容易。(实际上,我在嵌套在主屏幕会话中运行的屏幕会话中使用它,但这可能比您想知道的更多。)我通常遇到的唯一冲突是它是命令的默认转义字符telnet

相关内容