inputrc에서 기본 키 바인딩 해제

inputrc에서 기본 키 바인딩 해제

내가 하고 싶은 것은 Ch가 뒤로 삭제 문자를 보내지 않도록 하는 것입니다.

내 inputrc 파일에는 아무것도 없지만 바인드 -p에 표시됩니다.

답변1

C-h기본적으로 에 바인딩됩니다 backward-delete-char. 이것이 마음에 들지 않으면 .inputrc예를 들어 다른 명령에 바인딩하십시오.

"\C-h": nop

아무것도 하지 않게 놔두세요.

터미널이 Ch를 BackSpace키 1 로 보내고 C-h기존 명령에 명시적으로 바인딩되지 않은 경우(따라서 그렇지 않은 경우 nop) C-h이 명령이 실행됩니다 backward-delete-char.

보다 정확하게는 터미널 구성이 애플리케이션에 이러한 사실을 알리는 경우입니다. 이것은 erasestty 설정의 캐릭터입니다. 를 실행하여 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(예: )를 다시 시작하세요 . .inputrcreadline은 아마도 그렇지 않을 것이다보고서다시 로드한 후 바인딩( 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":'  

관련 정보