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
。