`\C-` 및 `\e` 대신 ALT(메타) 또는 기타 제어 키를 접두어로 사용하여 Readline 키 바인딩을 설정하려면 어떻게 해야 합니까?

`\C-` 및 `\e` 대신 ALT(메타) 또는 기타 제어 키를 접두어로 사용하여 Readline 키 바인딩을 설정하려면 어떻게 해야 합니까?

Control( \C-) 또는 Escape( )를 접두사로 사용하여 \eReadline 키 바인딩을 설정하는 예만 찾을 수 있습니다.

내 경우 macOS에서는 해당 \C-공간이 기본 키 바인딩으로 완전히 채워져 있으며 \eTouch Bar가 있는 Macbook에서는 해당 공간이 실용적이지 않습니다.

입력 "\M-f": kill-word결과 ~/.inputrc는 다음과 같습니다.

bind -P | grep -F "\M-"
kill-word can be found on "\e[3;5~" "\ed".

그러나 , 또는 접두사를 kill-word사용하여 실행할 수는 없습니다 . Readline은 이를 무시합니다.OptionCommandfn

이 문제는 macOS에만 해당됩니까? 어떻게 해결할 수 있나요?

또한 키 바인딩(예: 더 긴 키 바인딩의 접두사)이 실행되기 전에 발생하는 "시간 초과"를 어떻게 제어할 수 있나요?

@add (@laktak): bind '"^[f": kill-word'작동하지 않지만 ƒ터미널에서 생성됩니다. 여기에 이미지 설명을 입력하세요.

답변1

나는 당신이 잘못하고 있다고 생각하지 않습니다. Terminal.app에 "Meta"에 "Option" 키를 사용하도록 지시하면 됩니다. 터미널( + ,) 의 환경설정으로 이동하여프로필,그래서건반기본 프로필 탭을 클릭하고 "옵션을 메타 키로 사용"을 선택하세요.

Terminal.app 프로필 → 키보드 설정 스크린샷

그렇지 않으면 Option + 키가 Option+ 가 생성 f하는 것과 같은 특수 문자를 생성하는 기본 macOS 동작(대부분의 키맵에서)을 얻게 됩니다.후크가 있는 소문자 "f"스크린샷에서(전체 참조여기).

존재하다i 2학기, 나는 왼쪽 Option 키가 이미 기본적으로 합리적인 작업을 수행한다고 생각하지만, 만일을 대비하여 이를 변경하는 방법은 다음과 같습니다.

iTerm 2 옵션 키 동작

Option을 Escape로 다시 매핑하려는 경우 시스템 환경설정의 키보드 환경설정 창 하단 근처에 있는 "수정자 키..." 버튼을 클릭하여 수행할 수 있습니다.

macOS 시스템 설정 키보드 준비 패널

그런 다음 사용 가능한 옵션에서 원하는 대로 다시 매핑합니다.

macOS 키보드 준비 패널에서 수정자 키 다시 매핑

Control 키가 Mac 키보드에서 어색한 위치에 있기 때문에 Caps Lock을 Control로 다시 매핑할 수 있도록 새 Mac을 사용하는 첫 5분 정도에 이 환경설정 창을 열었습니다.

답변2

유틸리티는 다음과 같습니다.

showkey (1)          - examine the codes sent by the keyboard

하지만 이것은 mac-os에서는 없는 것 같습니다... 여기에 "키 코드"가 있습니다...?

또는 ctrl-V(qouted insert)를 입력한 다음 일부 특수 키를 입력합니다. Bash에서는 ^[OPxterm과 ^[[[AF1 키를 사용하여 콘솔에 인쇄합니다.

행 변수 읽기:

keyseq-timeout (500)

절반 완료된 시퀀스에 사용되는 시간 초과입니다.

그 아래에는 키를 기호로 변환하는 일종의 키 맵 파일이 있어야 합니다. 이것은 /usr/share/kbd/keymaps/mac/리눅스에서 온 것입니다:

keycode 51 = Delete  Remove
        alt keycode 51 = Meta_Delete
        shift alt keycode 51 = Meta_Delete
        control keycode  51 = Remove
keycode 53 = Escape
        alt keycode 53 = Meta_Escape
        shift alt keycode 53 = Meta_Escape
keycode  54 = Control
keycode  55 = Alt         # Command/Apple key
keycode  56 = Shift
keycode  57 = Caps_Lock
keycode  58 = AltGr       # Alt/Option key

유연성이 보이시나요! 메타 삭제 기호는 살해 단어가 될 수 있습니다…


바인딩'"^[f": 단어 삭제

, 또는 ctrl-V 다음에 Escape를 입력 ^[해야 합니다 . 1바이트 는 곡절 부호와 대괄호가 아닙니다.\e


다음과 같이 말하는 것과 같습니다. ^C는 Shift-6을 누른 다음 Shift-c를 누르는 것이 아니라 control-C를 의미합니다. 쉘(bash)이나 vim에서 ctrl-v를 누른 다음 Esc를 입력하면 을 얻습니다 ^[. 하지만 한 발 물러서면, 문자는 하나뿐입니다. readline의 이러한 메타 플래그 옵션과 함께 복잡해질 수 있습니다... 전체 체인을 설명하겠습니다.

키맵 "default.map"(스캔코드 및 수정자를 키 기호로 변환)

keycode 105 = Left F150 F151
  string F150 = "\033[150"
  string F151 = "\033[151"
keycode 106 = Right F154 F155
  string F154 = "\033[154"
  string F155 = "\033[155"

기본적으로 "왼쪽" 뒤의 F150 및 F151은 Shift 및 Ctrl 왼쪽 화살표를 나타냅니다. 두 번째 단계에서는 문자열(이 경우 이스케이프 시퀀스)을 정의합니다. 여기서는 \e작동하지 않지만 8진수 033은 ascii 27이고 control-[는 Escape입니다. 이 키맵은 Linux에만 해당되지만 X Windows에는 비슷한 논리가 있습니다.

.inputrc에서:

"\e[150": backward-word 
"\e[151": shell-backward-word 
"\e[154": forward-word 
"\e[155": shell-forward-word 

이는 Linux 콘솔에서 매우 잘 작동합니다. X Windows(Xorg)의 xterm에서: 전혀 없음: Xorg 자체가 키를 검색합니다.

backward-word can be invoked via "\e[150", "\e[1;2D", "\e[1;3D", "\eb".

가운데에 있는 두 개의 세미콜론은 VTxxx 스타일로 장식된 왼쪽 화살표입니다. 이는 사전 구성되어 있으며 backward-word자동으로 바인딩됩니다.

답변3

귀하의 질문을 올바르게 이해한 경우:

bind '"^[f": kill-word'

Option+F호출을 정의합니다kill-word

답변4

또 다른 옵션은 버튼을 Esc클릭한 후 d동일한 키 바인딩을 시뮬레이션하는 것입니다.

이전 명령의 마지막 인수( )를 붙여넣는 것과 동일하며 M-.먼저 클릭한 다음 다시 클릭하여 바꿀 수 있습니다.Esc.

MacBook의 Touch Bar 버전을 사용하기 위해 Caps Lock ⇪다시 매핑했습니다 .⎋ Escape

Caps Lock 다시 매핑

관련 정보