Odpowiedzi:
Wszystko, co musisz zrobić, to umieścić to w swoim ~/.zshrc
(lub w tym samym pliku, co motyw zachęty):
ZLE_RPROMPT_INDENT=0
W wersjach ZSH prowadzących do 5.0.2 wartość kodu źródłowego ZSH o nazwie rprompt_off
(która ustawia przesunięcie prawego marginesu) była na stałe zakodowana 1
.
Ale w wersji 5.0.5 programiści dodali możliwość zastąpienia tej wartości domyślnej poprzez ustawienie ZLE_RPROMPT_INDENT
zmiennej środowiskowej.
Uzasadnieniem dla tej „tiret” Jest tak, ponieważ niektóre starsze terminale zaczną przesuwać jeżeli ostatnia komórka wyświetlacza miała charakter w nim.
Jeśli korzystasz ze starszej wersji ZSH i nie możesz zaktualizować, nadal możesz pozbyć się tego miejsca, wykonując oba następujące kroki:
%{...%}
%{terminfo[cub1]}
Sprawdź FAQ i tę wiadomość na liście mailowej, aby uzyskać więcej informacji.
%git<Tab>
przekształca się w%ggit
Wysłałem raport o błędzie do opiekunów zsh, ale wygląda na to, że takie zachowanie jest zgodne z projektem. Ten problem jednak mnie tak zirytował, że postanowiłem samodzielnie załatać i skompilować zsh jako tymczasową poprawkę. Jeśli korzystasz z systemu OS X i używasz Homebrew (powinieneś), możesz zainstalować zsh wraz z moją łatą, uruchamiając:
brew install https://gist.github.com/padde/7963205/raw/eaedcc557859a40db87282fc39256fccd52d0aad/zsh.rb
prawdopodobnie będziesz chciał dodać /usr/local/bin/zsh
do /etc/shells
i chsh -s /usr/local/bin/zsh
po jej zakończeniu. Na koniec, oto surowy plik różnicowy dla każdego, kto jest zainteresowany:
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;
/*
Myślę, że biała przestrzeń po prawej jest zakodowana na stałe. Możesz jednak oszukać zsh
za pomocą następującego ustawienia:
RPROMPT="%{*%}"
co w zasadzie mówi, zsh
że gwiazda nie zajmuje znaków; z man zshmisc
:
%{...%}
Dołącz ciąg jako dosłowną sekwencję ucieczki. Łańcuch w nawiasach klamrowych nie powinien zmieniać pozycji kursora. (...)
Wadą jest to, że „przesuwasz” puste miejsce na koniec PROMPT
:
| PROMPT = "#" | | RPROMPT = "% {*%}" | | # ■ * |
Te |
symbole oznaczają końcowe krawędzie ■ kursora.
Innym pomysłem byłoby zwiększenie COLUMNS
o 1:
COLUMNS=$((COLUMNS + 1))
Ale trzeba wymyślić sposób, jak to zrobić tylko dla szybkiego renderowania, ale nie dla poleceń. Spowoduje to połknięcie ostatniego znaku w każdym wierszu wiersza polecenia z wieloma wierszami.