在 inputrc 中绑定 Ctrl-\ 吗?

在 inputrc 中绑定 Ctrl-\ 吗?

我一直在搞这个,似乎无法让它发挥作用。在终端中使用Ctrl+可以正确输出该组合,因此它应该是可识别的。V^\

由于我在 emacs 中将Ctrl+\绑定到了挂起帧,因此我希望能够通过再次按Ctrl+快速返回前台\

我相信这是唯一可行的组合:

"\C-\\": "fg\n"

如果我在这个组合的+Enter之后点击,我会得到以下输出,这可能有用:CtrlV

bash: $'\034': command not found

答案1

Ctrl+\ 是导致终端发送信号 (SIGQUIT) 的控制字符之一,如 Ctrl+C (SIGINT) 和 Ctrl+Z (SIGTSTP)。你可以运行stty -a来显示哪些字符对终端有特殊含义;看清除/删除 Linux 中 shell/终端上输入错误的隐形密码更多细节。结果是,当您按Ctrl+时\,bash 在其标准输入上看不到字符,它看到一个信号,并且不会通过键绑定机制。

您可以使用命令关闭终端中字符的含义stty quit undef。如果这样做,bash 会将字符视为输入,并且您的键绑定将生效。

要将Ctrl+设置\为 bash 绑定,但在运行命令时具有其正常的终端绑定,请更改终端设置并在运行命令后。

preexec () {
  stty quit '^\'
}
precmd () {
  stty quit undef
}

preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
    local this_command=`HISTTIMEFORMAT= history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//"`;
    preexec "$this_command"
}
trap 'preexec_invoke_exec' DEBUG
PROMPT_COMMAND='precmd'

不要让键类型fg和换行符,而是将键绑定到 shell 命令。您不能从 执行此操作.inputrc,这适用于所有 readline 应用程序,而不仅仅是 bash。相反,在您的 中定义 bash 绑定.bashrc

bind -x '"\C-\\": "fg"'

相关内容