Readline .inputrc는 각 줄을 기본값으로 재설정합니다.

Readline .inputrc는 각 줄을 기본값으로 재설정합니다.

Bash 명령줄에서 키를 다시 매핑하려고 합니다. 다음과 같이 단순화한 .inputrc 파일이 있습니다.

"\C-w": forward-word

다른 설정도 있지만 질문의 명확성을 위해 하나로 줄였습니다.

쉘의 모든 새 라인에서 Cw가 기본 바인딩으로 재설정됩니다 unix-word-rubout. 라인을 편집할 때 Cx Cr을 사용하여 .inputrc 파일을 다시 로드할 수 있으며 Cw는 내가 할당한 Cw 작업을 실행합니다 forward-word. 그런 다음 bash의 다음 줄에서 다시 재설정됩니다 unix-word-rubout.

내가 달리면

> bind -P | grep C-w

알겠어요

unix-word-rubout can be found on "\C-w".

하지만 내가 달리면

> bind -P | grep C-w 

그런 다음 Enter 키를 누르기 전에 Cx Cr로 .inputrc를 다시 로드하면 다음과 같은 결과가 나타납니다.

forward-word can be found on "\C-w", "\ef".

그래서 .inputrc를 잘 로드할 수 있고 bash도 이를 인식할 것입니다. 그러나 모든 새 줄마다 기본 설정을 다시 로드합니다.

JLine, Java Readline 복제본은 문제 없이 예상대로 내 .inputrc를 사용합니다.

저는 OS/X Yosemite에서 bash를 실행하고 있습니다. 저는 Homebrew 버전 4.4.12를 실행하고 있지만 Apple 버전 3.2.57(2007년부터)도 정확히 동일하게 작동합니다. Terminal.app 및 iTerm2에서도 동일한 방식으로 작동합니다.

내 설정을 모든 행에 적용하고 싶습니다. 어떻게 계속 유지할 수 있나요?

답변1

문제는 직렬 통신도 일부 키를 정의한다는 것입니다.
사용:

$ stty -a
speed 38400 baud; … …
swtch = <undef>; start = ^Q; stop = ^S; … … werase = ^W; …
-parenb …

시스템 설정에 따라 다음이 표시됩니다.

werase = ^W

이것은 word-rubout의 stty 정의입니다 ctrl W.

그냥 실행하세요:

stty werase undef

undef그러한 키를 만드는 것은 컨트롤러에 달려 있습니다 ssty.
터미널을 사용할 수 없게 될 수 있으므로 변경 사항을 신중하게 선택하세요.

readline그런 다음 키는 bash 셸에서 사용할 수 있도록 시스템에서 재배포됩니다.

변경 사항( )을 유지하려면 for stty werase undef에 넣을 수 있습니다./etc/profile모두이 파일을 사용하는 쉘(거의 모두). 모든 bash 쉘 또는 "이 사용자" 대화형 쉘 /etc/bash.bashrc에 적용됩니다 .~/.bashrc

관련 정보