그의Linux 실용 가이드, 4e, Sobel은 다음과 같은 부분을 제공합니다.
$ cat ~/.inputrc
set editing-mode vi
$if mode=vi
"\C-y": vi-next-word
$else
"\C-y": forward-word
$endif
이 코드 조각은 bash가 vi 또는 emacs 모드인지 여부에 관계없이 CONTROL-Y가 커서를 다음 단어의 시작 부분으로 이동하도록 하는 것으로 보입니다.
제가 혼란스러워하는 점은 이 코드 조각을 사용하여 어떻게 Emacs 모드에 있을 수 있는지입니다. 나의 현재 이해는 다음과 같습니다.
Readline 라이브러리에서 일부 요소/단축키/토큰(용어를 모르겠습니다)을 사용하면 bash는 input.rc를 검색하여 제가 의미하는 바를 확인합니다.
1)이 true인 경우(아마도 그렇지 않고 input.rc는 새 쉘을 초기화하는 데만 사용되지만 이 경우
$else
위의 절이 결코 도착하지 않기 때문에 왜 관련이 있는지 이해할 수 없습니까?) 다음을 사용합니다set -o emacs
. 명령줄의 지정된 항목에서 앞으로 건너뛰기를 사용하면CONTROL-Y
input.rc를 읽지 않고 다시 뭔가로 전환할 수 있습니까editing-mode = vi
?
답변1
거의 맞으신 것 같아요.
set editing-mode
어떤 Readline 모드가 사용되는지 결정합니다기본적으로. 그러나 bash
언제든지 모드를 전환할 수 있습니다. Readline을 사용하는 다른 응용 프로그램도 그렇게 할 수 있습니다.
키를 누를 때마다 실제 파일을 읽는 것은 .inputrc
비효율적이므로 실제로 일어나는 일은 아마도 다음과 같을 것입니다.
프로그램이 Readline 라이브러리를 초기화하면 라이브러리는 이 .inputrc
파일을 읽고 필요한 설정을 준비합니다.두 가지 모드. set editing-mode
어떤 모드가 사용자에게 먼저 표시되는지 즉시 결정되지만 사용자가 나중에 모드를 전환하려는 경우 두 모드가 모두 구성됩니다 .
조건이 없으면 가능한 경우 키 바인딩이 두 모드 모두에 적용됩니다. $if mode=
조건부 구문을 사용하면 키 바인딩을 특정 모드에만 적용할 수 있습니다.
다른 조건부 구성도 있습니다. $if term=
현재 터미널이 특정 유형인 경우에만 키 바인딩을 구성할 수 $if application=
있으며 .inputrc
.