2015-01-05 3 views
-1

Когда я вызываю этот виджет с ^x^e и затем выхожу из визуального редактора (vim), текущая команда прерывается с ошибкой, а содержимое команды помещается на следующей командной строки для выполнения.Виджет Zsh ZLE «edit-command-line» возвращается с ошибкой

Я ожидаю, что содержимое команды должно быть возвращено в текущую командную строку, как в bash. И я подозреваю, что ошибка связана с ненулевым статусом выхода редактора.

я даже начать ЗШ свежий, как:

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