首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zsh ZLE小部件“编辑-命令行”返回时出错。

Zsh ZLE小部件“编辑-命令行”返回时出错。
EN

Stack Overflow用户
提问于 2015-01-05 03:53:55
回答 1查看 477关注 0票数 0

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

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

我甚至开始重新开始:

代码语言:javascript
复制
zsh -f
autoload -U edit-command-line && zle -N edit-command-line
bindkey '^x^e' edit-command-line

但还是有同样的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-06 09:05:51

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

正如所写的,这不会执行编辑过的行。 -彼得·斯蒂芬森(http://www.zsh.org/mla/workers/2000/msg02123.html)

这些天,在函数结束时使用send-break可能会触发错误。

实际上,它可以像edit-command-line文件的修补程序那样进行扩展:

(% echo ${^fpath}/edit-command-line(N)可能会找到该文件)

代码语言:javascript
复制
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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27773180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档