Control( \C-
) 또는 Escape( )를 접두사로 사용하여 \e
Readline 키 바인딩을 설정하는 예만 찾을 수 있습니다.
내 경우 macOS에서는 해당 \C-
공간이 기본 키 바인딩으로 완전히 채워져 있으며 \e
Touch 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은 이를 무시합니다.Option
Command
fn
이 문제는 macOS에만 해당됩니까? 어떻게 해결할 수 있나요?
또한 키 바인딩(예: 더 긴 키 바인딩의 접두사)이 실행되기 전에 발생하는 "시간 초과"를 어떻게 제어할 수 있나요?
@add (@laktak): bind '"^[f": kill-word'
작동하지 않지만 ƒ
터미널에서 생성됩니다.
답변1
나는 당신이 잘못하고 있다고 생각하지 않습니다. Terminal.app에 "Meta"에 "Option" 키를 사용하도록 지시하면 됩니다. 터미널( ⌘+ ,) 의 환경설정으로 이동하여프로필,그래서건반기본 프로필 탭을 클릭하고 "옵션을 메타 키로 사용"을 선택하세요.
그렇지 않으면 Option + 키가 Option+ 가 생성 f하는 것과 같은 특수 문자를 생성하는 기본 macOS 동작(대부분의 키맵에서)을 얻게 됩니다.후크가 있는 소문자 "f"스크린샷에서(전체 참조여기).
존재하다i 2학기, 나는 왼쪽 Option 키가 이미 기본적으로 합리적인 작업을 수행한다고 생각하지만, 만일을 대비하여 이를 변경하는 방법은 다음과 같습니다.
Option을 Escape로 다시 매핑하려는 경우 시스템 환경설정의 키보드 환경설정 창 하단 근처에 있는 "수정자 키..." 버튼을 클릭하여 수행할 수 있습니다.
그런 다음 사용 가능한 옵션에서 원하는 대로 다시 매핑합니다.
Control 키가 Mac 키보드에서 어색한 위치에 있기 때문에 Caps Lock을 Control로 다시 매핑할 수 있도록 새 Mac을 사용하는 첫 5분 정도에 이 환경설정 창을 열었습니다.
답변2
유틸리티는 다음과 같습니다.
showkey (1) - examine the codes sent by the keyboard
하지만 이것은 mac-os에서는 없는 것 같습니다... 여기에 "키 코드"가 있습니다...?
또는 ctrl-V(qouted insert)를 입력한 다음 일부 특수 키를 입력합니다. Bash에서는 ^[OP
xterm과 ^[[[A
F1 키를 사용하여 콘솔에 인쇄합니다.
행 변수 읽기:
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