내가 하고 싶은 것은 Ch가 뒤로 삭제 문자를 보내지 않도록 하는 것입니다.
내 inputrc 파일에는 아무것도 없지만 바인드 -p에 표시됩니다.
답변1
C-h
기본적으로 에 바인딩됩니다 backward-delete-char
. 이것이 마음에 들지 않으면 .inputrc
예를 들어 다른 명령에 바인딩하십시오.
"\C-h": nop
아무것도 하지 않게 놔두세요.
터미널이 Ch를 BackSpace키 1 로 보내고 C-h
기존 명령에 명시적으로 바인딩되지 않은 경우(따라서 그렇지 않은 경우 nop
) C-h
이 명령이 실행됩니다 backward-delete-char
.
보다 정확하게는 터미널 구성이 애플리케이션에 이러한 사실을 알리는 경우입니다. 이것은 erase
stty 설정의 캐릭터입니다. 를 실행하여 stty 설정을 표시할 수 있습니다 stty -a
.
답변2
바인딩은 nop
키 누르기를 억제하지만 키 누르기 릴리스 앞에 접두사를 붙이려는 경우에는 도움이 되지 않습니다. 예를 들어, "Mc Mi" 시퀀스가 단순히 긴 명령을 입력하는 매크로에 바인딩되도록 관련 매크로 집합의 접두사로 "Mc"를 사용한다고 가정합니다 controlct sensor instance
. 물론 "Mc Md"는 다른 것을 인쇄하는 식입니다.
"\ec": capitalize-word"
그러나 당신을 방해할 기본 바인딩이 있습니다 . 키 시퀀스 "Mc Mi"를 충분히 빠르게(구체적으로 readline 변수에 의해 설정된 밀리초 내에 keyseq-timeout
) 인쇄하면 원하는 동작을 얻을 수 있습니다. 그러나 주저한다면 bash는 명령인 "Mc" 기본 바인딩만 실행할 것입니다 nop
. 따라서 이 경우에는 정말 필요합니다.풀다열쇠는 아니다리바인드아무 일도 하지 않는 일이 되어 버립니다.
다행스럽게도 readline은 이를 쉽게 지원합니다(@user996142가 주석에 올바른 구문과 참조를 제공했습니다).
"\ec":
줄에 혼자. 그러면 바인딩이 지워집니다.
경고 시간: 하다"Cx Cr"을 사용하여 파일을 다시 로드하는 exec bash -l
대신 bash(예: )를 다시 시작하세요 . .inputrc
readline은 아마도 그렇지 않을 것이다보고서다시 로드한 후 바인딩( bind -l
표시되지 않고 bind -q capitalize-word
"대문자 단어가 어떤 키에도 바인딩되어 있지 않습니다"라고 보고하지만 여전히 바인딩된 것처럼 시간 초과됩니다 nop
. 이는 일부 bash 버전 또는 행 읽기의 버그입니다.
답변3
바인딩을 해제하려면 다음 방법을 사용해야 했습니다. 나에게 이해하기 어려운 중요한 부분은 주변의 작은따옴표를 추가하는 것이었습니다.
FWIW, 셸에서 직접 명령을 실행할 때 작동하는 다양한 변형이 있습니다. 그러나 이것이 .inputrc 또는 .sh 파일에 명령을 포함할 때 작동하는 유일한 방법입니다.
Alt-c
'"\ec":'
Ctrl-c
'"\C-c":'
다음 -u <readline command name>
도 작동하는 것 같습니다.때때로.
bind -u yank
bind '"\C-y":'