며칠 전에 사용할 수 있다는 것을 알았습니다.
"\ej": history-search-backward
"\ek": history-search-forward
화살표 키를 사용하지 않으려면. 이제 이것이 매력적으로 작동하는 동안 .inputrc에 대해 자세히 알아보기 위해 bash 문서를 읽기 시작했습니다. 이 페이지를 살펴보시기 바랍니다(특히 키 바인딩이 있는 섹션). https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html#Readline-Init-File-Syntax \e는 "이스케이프 문자"로 알려져 있습니다. 영어가 내 모국어는 아니지만 이것이 Alt를 매핑하는 데 사용될 수 있다고는 결코 생각하지 않습니다. 이것은 문서와 제가 작업하고 있는 프로젝트입니다. 나에게 그것은 설명적이기보다는 실증적이다. 문제는 다른 사람들이 먼저 알아내고 팁을 제공할 수 있도록 이 내용이 실제로 어디에 기록되어 있느냐는 것입니다.
답변1
Alt
Escape
(ASCII 033, ) 에 대한 키 매핑은 "\e"
터미널 에뮬레이터에 의해 수행되며 readline 라이브러리(처리 ~/.inputrc
)는 포함되지 않습니다.
문제는 터미널에서 실행 중인 프로그램에 실제 키 이벤트를 보낼 수 있는 방법이 없다는 것입니다. 터미널은 이를 프로그램이 tty에서 읽을 수 있는 일련의 바이트로 변환합니다.
Alt/Meta 키의 경우 다음 두 가지 방법으로 이를 수행할 수 있습니다.
이것을 Escape(ASCII 033/0x1b)에 매핑합니다. 누르면
Alt-K
실제로 전송 됩니다"\ek"
.Alt-Shift-K
"\eK"
이는 대부분의 터미널 에뮬레이터의 기본 설정이지만 구성 가능한 경우가 많으며 아직 설정하지 않은 경우 기본값으로 설정해야 할 충분한 이유가 있습니다.키의 ASCII 값의 상위 7비트를 켭니다. 키를 누르면
Alt-K
실제로 해당0x6b | 0x80 = 0xeb
바이트인0x6b
ASCII 값이 전송됩니다"k"
.
후자는 "\M-k"
readline 바인딩에서 인식됩니다.
물론아니요en_US.UTF-8
모든 멀티바이트 로케일(대부분의 최신 시스템의 기본값)에서 작동하고 제대로 작동하지 않습니다. 이러한 시스템에서 터미널 에뮬레이터는 원시 0xeb
바이트(유효한 UTF-8 시퀀스가 아니라 바이너리 쓰레기)를 보낼 수 없지만 ISO-8859-1에서 UTF-8로 변환할 "\xc3\xab" = "ë"
수 e
있습니다 Alt-K
. 누르면 전송됩니다.
그러나 readline은 , 등과 같은 수많은 옵션을 "ë"
아무리 조작하더라도 다시 매핑하는 방법을 모릅니다."\M-k"
convert-meta
enable-meta-key
input-meta
그렇게 할 수 있다고 해도 사람들이 실제로 입력하고 싶어하고 및 와 같이 관련 없는 것으로 취급되는 키를 인식하지 않기 때문에 여전히 문제가 "ë"
있을 수 "ó"
있습니다 .Alt-K
Alt-S
답변2
\e
당신은 그것을 찾아야합니다이것ESC
대신 이스케이프 문자(그 중 하나만 문자 코드 27이 자주 작성됨을 의미함 )하나이스케이프 문자(여러 문자 중 하나를 나타냄)
이 경우 문서에서는 ESC 문자 두 개를 쓸 수 \e
있도록 ESC 문자의 인스턴스를 나타낸다고 말하고 있는 것 같습니다 .\e\e
ALT를 의미하지 않습니다.