ZSH에서 전역 키 바인딩 만들기

ZSH에서 전역 키 바인딩 만들기

다음과 같은 간단한 위젯을 만들었습니다.

function my_widget() { ... }

zle -N my_widget

bindkey '^P' my_widget

문제는 이 키 바인딩이 항상 작동하지 않는다는 것입니다. 예를 들어 스크립트가 패스 read또는 입력을 기다리는 동안에는 vared위젯을 호출할 수 없습니다 . 언제든지 호출할 수 있기를 원합니다(예: ^U또는 ^W).

모든 키맵에 키바인딩을 추가해 보았습니다( .safe쓰기 금지되어 있으므로 제외).

ZLE 위젯이 아니더라도 어디에서나 바로가기를 사용할 수 있기를 원합니다.

내가 이루고 싶은 것을 이룰 수 있을까?

답변1

zle/는 bindkey현재 쉘을 구성하는 zShine Ditor입니다 l.e

대화형 셸에서 또는 해당 vared명령을 통해 명령 ed줄을 편집하려면 zle을 호출하세요 var. 두 경우 모두 zle은 한 줄에 국한되지 않고 모든 텍스트를 편집할 수 있습니다.

read라인 편집기를 사용하는 대신,읽다-dstdin(또는 다른 라인 설명자)에서 단일 라인(또는 다른 유형의 레코드)을 가져오며 -u터미널 장치일 필요는 없으며 해당 레코드의 단어를 제공된 변수에 저장합니다.

사용자가 스크립트에 일부 텍스트를 입력하고 zle을 사용하여 편집하도록 하려면 다음을 사용해야 합니다 vared.

var=; vared var

대신 IFS= read -r var, stdin이 해당 터미널이 아니더라도 입력은 항상 터미널의 사용자로부터 읽혀진다는 점을 기억하십시오.

zsh 인스턴스의 행 편집기가 기본값과 다른 키 바인딩을 갖도록 스크립트를 해석하기 시작하려면 zsh 인스턴스에서 이러한 명령을 실행하고 zle명령 bindkey을 사용하여 이러한 위젯을 정의하고 바인딩해야 합니다.

이러한 위젯을 에 추가하여~/.zshenv모든zsh

^W및 의 경우 ^Uzle zsh위젯이 있지만 해당 위젯을 모방(및 향상)합니다.작은 부품라인 편집기(and)에 대한 터미널 장치 라인 규칙(커널의 tty 장치 드라이버에 있음) erase. kill라인 편집기(애플리케이션이 자체 라인 편집기를 구현하지 않고 터미널에서 읽을 때 사용됨)는 매우 기본적이며 명령을 사용하여 바인딩할 수 있는 몇 가지 위젯( kill, erase, eol, ...)만 있고 그 이상은 많지 않습니다. 더 구성 가능합니다.eofstty

관련 정보