readline에서 ESC와 동일한 작업을 수행하도록 Ctrl-C를 다시 바인딩할 수 있나요?

readline에서 ESC와 동일한 작업을 수행하도록 Ctrl-C를 다시 바인딩할 수 있나요?

나는 set -o vibash()에서 vi 모드를 사용하기 시작했고 내 노트북에는 Esc 키(멍청한 터치 바...)가 없어서 명령줄에서 삽입 모드를 떠나는 것이 짜증스럽습니다. Vim에서는 Ctrl-C를 Esc 키와 동일한 기능으로 다시 매핑한다는 생각이 들었습니다.

이제 Ctrl-C는 일반적으로 쉘에서 매우 중요한 목적을 가지고 있으므로 해당 키 조합을 Esc에 매핑하는 것은 아마도 좋은 생각이 아니지만 단지 호기심에서 비롯된 것입니다.

readline에서 Esc 키와 동일한 작업을 매핑 Ctrl-C하거나 수행 할 수 있습니까 ?Ctrl-$something

답변1

이 부분은 추가 설정 없이 readline이나 일반 터미널에서 대신 Ctrl-$something사용할 수 있습니다 .Ctrl-[Escape

Ctrl-@, Ctrl-[A-Z], Ctrl-[, Ctrl-\Ctrl-](=> 또는 =>와 같은 터미널 특수 문자가 아닌 경우) 예를 들어 다음과 같이 바인딩할 수도 있습니다 Ctrl-^.Ctrl-_Ctrl-DeofCtrl-\quit

bind '"\C-@": "\e"'

일부 터미널에서는 결합 및 결합을 통해 Ctrl-@생성되기도 합니다 .Ctrl-`‎Ctrl-_Ctrl-/

또한 이러한 조합은 일반적으로 터미널 에뮬레이터 설정에 따라 대부분의 터미널 Alt-key에 매핑되므로 바인딩 대신 다음 을 사용할 수 있습니다 .Esc-keyAlt-CCtrl-CEscape

bind '"\ec":"\e"'

이 부분의 경우 tty 드라이버는 Ctrl-Cbash 또는 readline에 도달하기 전에 Ctrl-C이를 특수 키( )로 처리합니다 . 왜냐하면 readline은 intr라인 편집기에 들어갈 때 tty 설정을 끄지 않기 때문입니다. ISIG예를 들어, 물론 항상 이 작업을 수행할 수 있습니다.

stty intr ^]; bind '"\C-C":"\e"'

작업을 중단하고 싶을 때 Ctrl-]대신 사용하도록 재교육 하지만 이는 분명히 매우 나쁜 생각입니다.Ctrl-C

관련 정보