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'

관련 정보