inputrc에 Ctrl-\를 바인딩하시겠습니까?

inputrc에 Ctrl-\를 바인딩하시겠습니까?

나는 한동안 이것을 엉망으로 만들었고 제대로 작동하지 않는 것 같습니다. 터미널에서 +를 사용하면 Ctrl조합이 올바르게 출력되므로 인식이 가능해야 합니다.V^\

Emacs의 정지 프레임에 Ctrl+를 바인딩했기 때문에 +를 다시 눌러 전경으로 빨리 돌아갈 수 있기를 원합니다 .\Ctrl\

나는 이것이 가능한 유일한 조합이라고 생각합니다.

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

이 조합에서 + 뒤를 클릭하면 Enter다음과 같은 결과가 나오며 이는 유용할 수 있습니다.CtrlV

bash: $'\034': command not found

답변1

Ctrl+\는 Ctrl+C(SIGINT) 및 Ctrl+Z(SIGTSTP)와 같이 터미널이 신호(SIGQUIT)를 보내도록 하는 제어 문자 중 하나입니다. 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과 개행 문자를 제공하는 대신 키를 쉘 명령에 바인딩하십시오. 에서는 이 작업을 수행할 수 없습니다 .inputrc. 이는 bash뿐만 아니라 모든 readline 애플리케이션에 적용됩니다. 대신 다음에서 bash 바인딩을 정의하세요 .bashrc.

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

관련 정보