zsh에서 키맵을 삭제하고 키를 완전히 비활성화합니다.

zsh에서 키맵을 삭제하고 키를 완전히 비활성화합니다.

Insertzsh에서 키를 완전히 비활성화하고 싶습니다 . 이 키는 실제로는 쓸모가 없으며 실수로 눌렀을 때만 짜증이 납니다.

바인딩을 제거하는 방법을 찾았습니다.overwrite-mode

bindkey -r "^[[2~"

하지만 이제 실제로 를 누르면 Insert덮어쓰기 모드를 활성화하는 대신 ~커서 위치에 인쇄됩니다.

F12아무 것도 바인딩되지 않은 를 누르면 비슷한 일이 발생합니다 . 또한 인쇄됩니다 ~.

키를 눌러도 zsh에서 아무 작업도 수행되지 않도록 Insert키를 완전히 비활성화하려면 어떻게 해야 합니까 ?F12

Insert일부 다른 프로그램에서 실제로 유용한 목적으로 키를 사용할 수 있기 때문에 키를 전역적으로 비활성화하고 싶지 않습니다 .

답변1

Insert에서 인식되지 않는 이스케이프 시퀀스를 보내는 특수 키(예: )를 누르면 zsh이 작업이 수행됩니다. zsh는 이스케이프 시퀀스의 개별 바이트를 사용하여 작업을 시도합니다.

의 결과를 보면 bindkeyzsh에는 키에 바인딩할 수 있는 적절한 기능이 없는 것 같습니다.무시하다그것. 하지만 Insert빈 매크로에 다시 바인딩할 수 있습니다.

bindkey -s '\e[2~' ''

.F12​ 일반적으로 어떤 이스케이프 시퀀스가 ​​전송되는지 보려면 Ctrl+를 누르세요 .V F12F12

bindkey -s '\e[24~' ''

매뉴얼 페이지 에 따르면 zshzle이 접근 방식에는 다음과 같은 제한 사항이 있습니다.

ZLE 명령뿐만 아니라 `bindkey -s'를 사용하여 키 시퀀스를 다른 문자열에 바인딩할 수 있습니다. 이러한 시퀀스를 읽으면 대체 문자열이 입력으로 다시 푸시되고 이러한 가짜 키 입력을 사용하여 명령 읽기 프로세스가 다시 시작됩니다. 이 입력은 자체적으로 다른 대체 문자열을 호출할 수 있지만 루프를 감지하기 위해 프로세스가 중지됩니다.이십실제 명령을 읽지 않고도 이러한 대체 작업을 수행할 수 있습니다.

내가 원래 제안한 바인딩에는 \a이러한 단점이 없는 것 같습니다.

bindkey -s '\e[2~' '\a'

관련 정보