Zsh 바인딩 키는 Ctrl+c를 Ctrl+p로 매핑합니다.

Zsh 바인딩 키는 Ctrl+c를 Ctrl+p로 매핑합니다.

"ls"와 같은 명령을 실행하기 위해 CTRL+L을 매핑하는 방법을 알고 있습니다.

bindkey -s "^L" 'ls^M'

하지만 내 ZSH에서 CTRL+c를 다른 키 입력(예: CTRL+p)에 어떻게 매핑합니까?

아니면 현재 실행 중인 프로세스를 종료하는 명령은 무엇입니까?

답변1

^C~이다방해하다기본적으로 시스템 터미널 드라이버에는 문자가 있으며, 누르는 문자는 명령을 중단하거나 장기 실행 등을 완료할 수 있습니다. 쉘은 관련되지 않습니다.

자체 라인 편집기에서 zsh의 바인딩이 작동하도록 하려면 이를 다른 것에 바인딩해야 합니다. 그렇지 않으면 zle시스템이 SIGINT 신호를 생성하기 위해 문자를 가로채기 때문에 +를 누를 때 문자가 나타나는 것을 볼 수 없습니다 .^CCtrlc

stty intr '^G'
bindkey -s '^C' whatever

또는:

bindkey '^C' up-line-or-history

^P모드에서 기본 바인딩과 동일한 위젯을 바인딩합니다 .emacs

런타임에만 역할이 되려면 ^G다음을 수행하면 됩니다.intrzle

autoload add-zle-hook-widget
intr-is-cC() stty intr '^C' < /dev/tty
intr-is-cG() stty intr '^G' < /dev/tty
zle -N intr-is-cC
zle -N intr-is-cG
add-zle-hook-widget line-init intr-is-cG
add-zle-hook-widget line-finish intr-is-cC

bindkey -s '^C' whatever

이는 zle이 시작될 때(프롬프트를 실행한 후) 및 종료할 때(프롬프트를 떠날 때) intr로 설정됩니다 .^G^C

관련 정보