2015-01-05 37 views
-1

當我使用^x^e調用此小部件,然後退出可視化編輯器(vim)時,當前命令中止並出現錯誤,並將命令內容放在下一個要執行的命令行。Zsh ZLE小部件「編輯命令行」返回錯誤

我期望的是命令內容應該放回當前的命令行,就像在bash中一樣。我懷疑這個錯誤是由於非零編輯器退出狀態。

我甚至開始zsh的新鮮,如:

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

但仍然得到了同樣的問題。

回答

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 

有了這個補丁,它把後面的編輯內容,在當前命令然後執行。

+0

謝謝!我使它成爲'$ {= $ {VISUAL: - $ {EDITOR:-vi}}} $ tmpfile && BUFFER =「$(<$ tmpfile)」&& zle accept-line'。 – Bohr