zsh에서 명령줄을 편집하는 데 *만* 사용되도록 편집기 명령을 어떻게 설정합니까?

zsh에서 명령줄을 편집하는 데 *만* 사용되도록 편집기 명령을 어떻게 설정합니까?

Ctrl+ 를 x클릭 하면 Ctrl+ 에서 현재 명령줄을 e살펴보거나 편집할 수 있습니다 . zsh그러나 을 사용하고 거기에서 셸 구문에 대한 구문 강조를 얻으려고 합니다. 명령줄을 편집할 때 셸 구문이 자동으로 인식되지 않기 때문에 이를 통과해야 합니다(생성 시 확장을 전달할 필요가 없음).$EDITOR$VISUALnano-Y shnanozsh/tmp/random-name.shnano

나는 실행할 수 있다

EDITOR='nano -Y sh'
VISUAL="$EDITOR"

Ctrl그런 다음 + x, Ctrl+를 눌러 e원하는 결과를 얻습니다. 그러나 다른 프로그램에서도 $EDITOR/ 를 사용합니다 $VISUAL. $EDITOR/를 위와 같이 설정 $VISUAL한 다음 실행하면(예를 들어) git commit커밋 메시지가 쉘 구문으로 강조 표시됩니다. 이는 제가 피하고 싶은 것입니다.

나도 시도했다

EDITOR='nano -Y sh' fc

어느했다작동하지만 각 입력이 약간 장황해 보입니다(함수에 넣을 수도 있습니다). 또한 fc명령줄은 다음을 사용하여 미리 채워집니다.최종 역사명령줄을 사용하려면 명령을 입력해야 합니다. 이는 긴 명령을 입력한 zsh다음 nano키보드 단축키를 사용하여 편집하기로 결정할 수 없음을 의미합니다.

zsh그렇다면 편집자/플래그에게 사용하라고 지시할 수 있는 방법이 있나요?오직Ctrl+를 눌러 명령줄을 편집할 때 x다른 프로그램이 Ctrl+를 무시합니까? 설정한 다음 잊어버릴 수 있는 환경 변수를 e원합니다 .~/.zshrc

답변1

모든 컴퓨터 문제를 해결하는 일반적인 접근 방식은 간접 수준을 추가하는 것입니다.

을 호출하는 대신 edit-command-line래퍼 함수가 호출됩니다.

nano-command-line () {
  local VISUAL='nano -Y sh'
  edit-command-line
}
zle -N nano-command-line
bindkey '^X^E' nano-command-line

1 과장.

답변2

zle스크립트는 EDITOR또는 를 사용합니다 VISUAL. 이를 수행하는 한 가지 방법은 숨겨진 위치에서 사용자 정의 함수 디렉토리로 스크립트를 복사하고 $fpath, 다른 환경 이름을 사용하도록 스크립트를 편집한 다음, zsh가 설치된 함수 디렉토리 전에 사용자 정의 함수 디렉토리를 호출하는 것입니다.

# in .zshrc, set something like
fpath=(~/.zsh/functions $fpath)

# then in the shell, something like
mkdir -p ~/.zsh/functions
cp /usr/share/zsh/*/functions/edit-command-line ~/.zsh/functions

그런 다음 파일을 편집 edit-command-line하고 다른 환경 변수를 지정합니다.

관련 정보