0

当我调用此小部件^x^e然后退出可视化编辑器 (vim) 时,当前命令会因错误而中止,命令内容将放在下一个要执行的命令行上。

我期望的是命令内容应该放回当前命令行,就像在 bash 中一样。我怀疑这个错误是因为非零编辑器退出状态。

我什至像这样重新开始 zsh:

zsh -f
autoload -U edit-command-line && zle -N edit-command-line
bindkey '^x^e' edit-command-line

但仍然遇到同样的问题。

4

1 回答 1

1

这似乎是有意的。他当时在 zsh 邮件列表上说:

如所写,这不会执行编辑的行。

-- 彼得斯蒂芬森 ( http://www.zsh.org/mla/workers/2000/msg02123.html )

send-break这些天在函数末尾使用可能会触发错误。

事实上,它可以像这个edit-command-line文件的补丁一样扩展:(
文件可能被找到% echo ${^fpath}/edit-command-line(N)

diff --git a/edit-command-line b/edit-command-line
index 250cac6..592fd07 100644
--- a/edit-command-line
+++ b/edit-command-line
@@ -11,7 +11,7 @@ local tmpfile=${TMPPREFIX:-/tmp/zsh}ecl$$
 print -R - "$PREBUFFER$BUFFER" >$tmpfile
 exec </dev/tty
 ${=${VISUAL:-${EDITOR:-vi}}} $tmpfile
-print -Rz - "$(<$tmpfile)" 
+BUFFER="$(<$tmpfile)"

 command rm -f $tmpfile
-zle send-break     # Force reload from the buffer stack
+zle accept-line

使用此补丁,它将编辑的内容放回当前命令行然后执行。

于 2015-01-06T09:05:51.460 回答