答案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
变量。