Tôi đã gửi một báo cáo lỗi cho những người duy trì zsh, nhưng có vẻ như hành vi này là do thiết kế. Tuy nhiên, vấn đề này làm tôi khó chịu đến mức tôi quyết định tự vá và biên dịch zsh như một cách khắc phục tạm thời. Nếu bạn đang dùng OS X và sử dụng Homebrew (bạn nên), thì bạn có thể cài đặt zsh bao gồm bản vá của tôi bằng cách chạy:
brew install https://gist.github.com/padde/7963205/raw/eaedcc557859a40db87282fc39256fccd52d0aad/zsh.rb
bạn có thể muốn thêm /usr/local/bin/zsh
vào /etc/shells
và chsh -s /usr/local/bin/zsh
sau đó. Cuối cùng, đây là khác biệt thô cho bất cứ ai quan tâm:
diff --git a/Src/Zle/zle_refresh.c b/Src/Zle/zle_refresh.c
index 17b78ce..f136178 100644
--- a/Src/Zle/zle_refresh.c
+++ b/Src/Zle/zle_refresh.c
@@ -1576,7 +1576,7 @@ zrefresh(void)
else
put_rpmpt = rprompth == 1 && rpromptbuf[0] &&
!strchr(rpromptbuf, '\t') &&
- (int)ZR_strlen(nbuf[0]) + rpromptw < winw - 1;
+ (int)ZR_strlen(nbuf[0]) + rpromptw < winw;
} else {
/* insert >.... on first line if there is more text before start of screen */
ZR_memset(nbuf[0], zr_sp, lpromptw);
@@ -1631,9 +1631,9 @@ zrefresh(void)
if (put_rpmpt && !iln && !oput_rpmpt) {
int attrchange;
- moveto(0, winw - 1 - rpromptw);
+ moveto(0, winw - rpromptw);
zputs(rpromptbuf, shout);
- vcs = winw - 1;
+ vcs = winw;
/* reset character attributes to that set by the main prompt */
txtchange = pmpt_attr;
/*