Zsh ZLE 小部件 "edit-command-line" returns 出现错误
Zsh ZLE widget "edit-command-line" returns with an error
当我用 ^x^e
调用这个小部件然后退出可视化编辑器 (vim) 时,当前命令因错误而中止,命令内容放在下一个要执行的命令行上。
我期望的是命令内容应该放回当前命令行,就像在bash中一样。我怀疑错误是因为非零编辑器退出状态。
我什至像这样开始新鲜的 zsh:
zsh -f
autoload -U edit-command-line && zle -N edit-command-line
bindkey '^x^e' edit-command-line
还是遇到同样的问题
这似乎是故意的。他当时在 zsh 邮件列表上说:
As written, this doesn't execute the line edited.
-- Peter Stephenson (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
有了这个补丁,它会将当前命令行上编辑的内容放回然后执行。
当我用 ^x^e
调用这个小部件然后退出可视化编辑器 (vim) 时,当前命令因错误而中止,命令内容放在下一个要执行的命令行上。
我期望的是命令内容应该放回当前命令行,就像在bash中一样。我怀疑错误是因为非零编辑器退出状态。
我什至像这样开始新鲜的 zsh:
zsh -f
autoload -U edit-command-line && zle -N edit-command-line
bindkey '^x^e' edit-command-line
还是遇到同样的问题
这似乎是故意的。他当时在 zsh 邮件列表上说:
As written, this doesn't execute the line edited.
-- Peter Stephenson (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
有了这个补丁,它会将当前命令行上编辑的内容放回然后执行。