Zsh ZLE小部件“edit-command-line”返回错误

时间:2015-01-05 03:53:56

标签: zsh zsh-zle

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

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

我甚至开始像zsh一样新鲜:

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

但仍然遇到同样的问题。

1 个答案:

答案 0 :(得分: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

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