Zsh를 사용하고 있습니다짐. 다음을 입력하여 Neovim에서 현재 명령을 편집하기 위한 키 바인딩을 설정했습니다 .zshrc
.
bindkey -v
export VISUAL=nvim
autoload edit-command-line; zle -N edit-command-line
bindkey -M vicmd v edit-command-line
이렇게 하면 편집 명령을 완료하면 아래 스크린샷과 같이 최종 결과가 원래 결과 아래에 배치됩니다.
내가 원하는 것은 최종 결과이다.바꾸다오리지널 라인. 주된 이유는 Powerlevel10k를 사용하기 때문입니다.즉시 알림활성화되었습니다. 이 기능은 이 특별한 경우에는 작동하지 않습니다.
답변1
면책 조항: 저는 Powerlevel10k의 저자입니다.
임시 힌트가 활성화되면 Powerlevel10k~해야 한다외부 편집기에서 명령 편집을 마친 후 프롬프트가 잘립니다. 그러나 그렇지 않습니다. 지금 막 나는수리하다신고해 주셔서 감사합니다.
이제 원래 질문으로 돌아갑니다.
내가 원하는 것은 최종 결과이다.바꾸다오리지널 라인.
이를 위해서는 사용자 정의 zle 위젯을 정의해야 합니다. 구현은 다음과 같습니다.
function edit-command-line-inplace() {
if [[ $CONTEXT != start ]]; then
if (( ! ${+widgets[edit-command-line]} )); then
autoload -Uz edit-command-line
zle -N edit-command-line
fi
zle edit-command-line
return
fi
() {
emulate -L zsh -o nomultibyte
local editor=("${(@Q)${(z)${VISUAL:-${EDITOR:-vi}}}}")
case $editor in
(*vim*)
"${(@)editor}" -c "normal! $(($#LBUFFER + 1))go" -- $1
;;
(*emacs*)
local lines=("${(@f)LBUFFER}")
"${(@)editor}" +${#lines}:$((${#lines[-1]} + 1)) $1
;;
(*)
"${(@)editor}" $1
;;
esac
BUFFER=$(<$1)
CURSOR=$#BUFFER
} =(<<<"$BUFFER") </dev/tty
}
다음과 같은 방법으로 바인딩할 수 있습니다 edit-command-line
.
zle -N edit-command-line-inplace
bindkey -M vicmd v edit-command-line-inplace
이는 명령줄을 제자리에서 업데이트할 수 없는 경우 edit-command-line-inplace
에 따라 달라집니다 . edit-command-line
예를 들어 을 입력하고 echo 'first line
을 클릭한 Enter다음 을 호출해 보십시오 edit-command-line-inplace
. 명령의 첫 번째 줄은 업데이트할 수 없으므로 edit-command-line-inplace
처럼 동작합니다 edit-command-line
.
edit-command-line-inplace
편집: 내가 게시한 첫 번째 버전은 nvim
명령줄 편집을 위해 명시적으로 호출되었습니다. VISUAL
환경 변수를 존중하도록 코드를 업데이트했습니다 EDITOR
.