Bash

在 inputrc 中綁定 Ctrl-?

  • August 6, 2015

我一直在糾結這個,似乎無法讓它發揮作用。在終端中使用Ctrl+正確輸出此組合,因此它應該是可辨識的。V``^\

由於我Ctrl+\綁定到 emacs 中的暫停幀,我希望能夠通過再次按下Ctrl+快速回到前台\

我相信這是唯一可行的組合:

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

如果我EnterCtrl+之後點擊V這個組合,我會得到以下輸出,這可能很有用:

bash: $'\034': command not found

Ctrl+\ 是導致終端發送信號 (SIGQUIT) 的控製字元之一,如 Ctrl+C (SIGINT) 和 Ctrl+Z (SIGTSTP)。您可以執行stty -a以顯示哪些字元對終端具有特殊含義;有關更多詳細資訊,請參閱在Linux 的外殼/終端上清除/擦除輸入錯誤的不可見密碼。結果是,當您按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 命令。你不能這樣做 from .inputrc,它適用於所有 readline 應用程序,而不僅僅是 bash。相反,在您的 bash 中定義一個綁定.bashrc

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

引用自:https://unix.stackexchange.com/questions/220448