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