2015-01-05 4 views
-1

^x^e으로이 위젯을 호출 한 다음 비주얼 편집기 (vim)를 종료하면 현재 명령이 오류로 중단되고 명령 내용이 실행될 다음 명령어 라인.Zsh ZLE 위젯 "edit-command-line"이 오류와 함께 반환됩니다.

내가 예상하는 바에 따르면 명령 내용은 bash와 마찬가지로 현재 명령 줄에 다시 입력해야합니다. 그리고 나는 그 오류가 0이 아닌 편집기 종료 상태 때문이라고 생각합니다. 여전히

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

그러나이 같은 문제를 가지고 : 같은

난 zsh을 신선한를 시작합니다.

답변

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

감사합니다. 나는 $ tmpfile && BUFFER = "$ (<$ tmpfile)"&& zle accept-line'을 만들었습니다. – Bohr