Readline 라이브러리는 .inputrc 파일을 어떻게 사용합니까?

Readline 라이브러리는 .inputrc 파일을 어떻게 사용합니까?

그의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 모드에 있을 수 있는지입니다. 나의 현재 이해는 다음과 같습니다.

  1. Readline 라이브러리에서 일부 요소/단축키/토큰(용어를 모르겠습니다)을 사용하면 bash는 input.rc를 검색하여 제가 의미하는 바를 확인합니다.

  2. 1)이 true인 경우(아마도 그렇지 않고 input.rc는 새 쉘을 초기화하는 데만 사용되지만 이 경우 $else위의 절이 결코 도착하지 않기 때문에 왜 관련이 있는지 이해할 수 없습니까?) 다음을 사용합니다 set -o emacs. 명령줄의 지정된 항목에서 앞으로 건너뛰기를 사용하면 CONTROL-Yinput.rc를 읽지 않고 다시 뭔가로 전환할 수 있습니까 editing-mode = vi?

답변1

거의 맞으신 것 같아요.

set editing-mode어떤 Readline 모드가 사용되는지 결정합니다기본적으로. 그러나 bash언제든지 모드를 전환할 수 있습니다. Readline을 사용하는 다른 응용 프로그램도 그렇게 할 수 있습니다.

키를 누를 때마다 실제 파일을 읽는 것은 .inputrc비효율적이므로 실제로 일어나는 일은 아마도 다음과 같을 것입니다.

프로그램이 Readline 라이브러리를 초기화하면 라이브러리는 이 .inputrc파일을 읽고 필요한 설정을 준비합니다.두 가지 모드. set editing-mode어떤 모드가 사용자에게 먼저 표시되는지 즉시 결정되지만 사용자가 나중에 모드를 전환하려는 경우 두 모드가 모두 구성됩니다 .

조건이 없으면 가능한 경우 키 바인딩이 두 모드 모두에 적용됩니다. $if mode=조건부 구문을 사용하면 키 바인딩을 특정 모드에만 적용할 수 있습니다.

다른 조건부 구성도 있습니다. $if term=현재 터미널이 특정 유형인 경우에만 키 바인딩을 구성할 수 $if application=있으며 .inputrc.

관련 정보