免责声明:我是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
环境变量的代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句