Yanıtlar:
Tek yapmanız gereken bunu ~/.zshrc
(veya istem temanızla aynı dosyaya) koymaktır :
ZLE_RPROMPT_INDENT=0
Giden ZSH sürümlerinde 5.0.2 denilen ZSH en C kaynak kodda bir değer rprompt_off
(ofset sağ marjı set) idi kodlanmış 1
.
Ancak 5.0.5 sürümünde geliştiriciler, ZLE_RPROMPT_INDENT
ortam değişkenini ayarlayarak bu varsayılan değeri geçersiz kılma yeteneğini ekledi .
Mantığı bazı eski terminaller ekranın son hücre içinde bir karakter olsaydı kaydırma başlayacak çünkü bu "girinti" içindir.
ZSH'nin daha eski bir sürümüyseniz ve güncelleme yapamıyorsanız, aşağıdakilerden her ikisini de yaparak o alandan kurtulabilirsiniz:
%{...%}
%{terminfo[cub1]}
Daha fazla bilgi için SSS bölümüne ve posta listesindeki bu mesaja göz atın .
%git<Tab>
,%ggit
Zsh sürdürücülerine bir hata raporu gönderdim, ancak bu davranış tasarımdan kaynaklanıyor gibi görünüyor. Ancak bu sorun beni o kadar rahatsız etti ki kendimi geçici bir düzeltme olarak kendimi düzeltmeye ve derlemeye karar verdim. OS X kullanıyorsanız ve Homebrew kullanıyorsanız (yapmalısınız), o zaman çalıştırarak yamam dahil zsh'yi yükleyebilirsiniz:
brew install https://gist.github.com/padde/7963205/raw/eaedcc557859a40db87282fc39256fccd52d0aad/zsh.rb
büyük olasılıkla eklemek isteyeceksiniz /usr/local/bin/zsh
için /etc/shells
ve chsh -s /usr/local/bin/zsh
sonradan. Son olarak, ilgilenen herkes için ham fark:
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;
/*
Bence sağdaki beyaz alan kodlanmış. Ancak zsh
aşağıdaki ayarla hile yapabilirsiniz :
RPROMPT="%{*%}"
prensipte zsh
yıldızın karakter içermediğini söyler ; from man zshmisc
:
%{...%}
Bir dizeyi değişmez bir kaçış dizisi olarak dahil eder. Parantez içindeki dize imleç konumunu değiştirmemelidir. (...)
Dezavantajı, boş "sonuna" kaydırmak olmasıdır PROMPT
:
| PROMPT = "#" | | RPROMPT = "% {*%}" | | # ■ * |
|
Semboller imleç ■, uç kenarlarını belirtir.
Başka bir fikir COLUMNS
1 artacak :
COLUMNS=$((COLUMNS + 1))
Ancak, bunun komut istemleri için değil, yalnızca istem oluşturma için nasıl yapılacağını düşünmesi gerekir. Ve bu, çok satırlı komut satırındaki her satırdaki son karakteri yutar.