CtrlJ다른 게시물에서 키 입력 대신 터미널에 입력할 수 있다는 내용 을 읽었습니다 CtrlM. 정말 좋습니다. Return하지만 내가 원하는 것은 다음과 같은 다른 조합으로 변경하는 것입니다. 키를 Ctrlspacebar다시 매핑하려고 시도했지만 성공하지 못했습니다.F1
가능합니까?
답변1
정확히 무엇을 하고 싶은지에 따라 다릅니다.
터미널에는 두 가지 주요 모드가 있으며, 둘 다 추가 설정을 통해 미세 조정할 수 있습니다.
- 쿠킹/표준 모드. 이 모드에서는 터미널에
^H
(또는^?
),^W
(^U
또는@
),^V
(또는\
) 문자를 사용하여 라인을 편집할 수 있는 내부 라인 편집기가 제공됩니다.^J
문자가 수신될 때까지 터미널 장치에서 읽는 응용 프로그램에는 아무 것도 전송되지 않습니다 . - 날것의모델. 각 문자는 입력 직후, 지연 후 또는 너무 많은 문자가 입력된 후에 터미널 장치를 읽는 응용 프로그램에서 사용할 수 있습니다.시간그리고분매개변수가 있지만 어쨌든 내부 라인 편집기는 사용되지 않습니다.
두 경우 모두 ^M
(CR) 문자는 자동으로 ^J
(LF)로 변환됩니다(또는 Enter 키를 누를 때 CR과 LF를 모두 보내는 터미널의 경우 무시됩니다).
첫 번째 모드는 터미널의 기본 모드입니다. 두 번째 모드는 회선 편집을 제어하려는 zsh
, bash
또는 응용 프로그램에서 사용됩니다.vi
첫 번째 모드에서는 라인을 승인하는 데 사용되는 문자를 변경할 수 없습니다.
^J
그러나 이 키나 저 키를 누를 때 문자를 보내도록 터미널에 지시할 수 있습니다 . 예를 들어, X11 리소스를 사용하여 키맵을 변경하고 주어진 키를 눌렀을 때 원하는 것을 보내도록 지시할 xterm
수 있습니다. translations
터미널이 키보드 재매핑을 지원하지 않는 경우에도 GNU를 사용 screen
하여 번역을 수행할 수 있습니다. 예를 들어, 터미널이 ^[OP
시간에 맞춰 일련의 문자를 보내는 경우 F1다음을 추가할 수 있습니다.
bindkey \033OP "\012"
~/screenrc
누르면 LF를 보내 라고 나옵니다F1
두 번째 경우인 애플리케이션 제어 입력의 경우 위와 동일한 방법을 계속 사용할 수 있지만 각 개별 애플리케이션에서 이 작업을 수행하도록 구성할 수도 있습니다.F1
예를 들어 zsh
LF 문자는 accept-line
zsh
위젯에 바인딩됩니다. 다음을 수행할 수 있습니다.
bindkey "^[OA" accept-line
F1동일한 위젯에 바인딩합니다 .
일반적 으로 Ctrl+SpaceNUL 문자가 전송되며 이를 호출할 수 \0
있습니다 ^@
.