실제로 기록된 위치에서 "\e"는 .inputrc의 Alt 키를 나타냅니다.

실제로 기록된 위치에서 "\e"는 .inputrc의 Alt 키를 나타냅니다.

며칠 전에 사용할 수 있다는 것을 알았습니다.

"\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

AltEscape(ASCII 033, ) 에 대한 키 매핑은 "\e"터미널 에뮬레이터에 의해 수행되며 readline 라이브러리(처리 ~/.inputrc)는 포함되지 않습니다.

문제는 터미널에서 실행 중인 프로그램에 실제 키 이벤트를 보낼 수 있는 방법이 없다는 것입니다. 터미널은 이를 프로그램이 tty에서 읽을 수 있는 일련의 바이트로 변환합니다.

Alt/Meta 키의 경우 다음 두 가지 방법으로 이를 수행할 수 있습니다.

  1. 이것을 Escape(ASCII 033/0x1b)에 매핑합니다. 누르면 Alt-K실제로 전송 됩니다 "\ek". Alt-Shift-K "\eK"이는 대부분의 터미널 에뮬레이터의 기본 설정이지만 구성 가능한 경우가 많으며 아직 설정하지 않은 경우 기본값으로 설정해야 할 충분한 이유가 있습니다.

  2. 키의 ASCII 값의 상위 7비트를 켭니다. 키를 누르면 Alt-K실제로 해당 0x6b | 0x80 = 0xeb바이트인 0x6bASCII 값이 전송됩니다 "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-metaenable-meta-keyinput-meta

그렇게 할 수 있다고 해도 사람들이 실제로 입력하고 싶어하고 및 와 같이 관련 없는 것으로 취급되는 키를 인식하지 않기 때문에 여전히 문제가 "ë"있을 수 "ó"있습니다 .Alt-KAlt-S

답변2

\e당신은 그것을 찾아야합니다이것ESC대신 이스케이프 문자(그 중 하나만 문자 코드 27이 자주 ​​작성됨을 의미함 )하나이스케이프 문자(여러 문자 중 하나를 나타냄)

이 경우 문서에서는 ESC 문자 두 개를 쓸 수 \e있도록 ESC 문자의 인스턴스를 나타낸다고 말하고 있는 것 같습니다 .\e\e

ALT를 의미하지 않습니다.

관련 정보