Відповіді:
Все, що вам потрібно зробити, - це помістити це у свій ~/.zshrc
(або у той самий файл, що і тема підказки):
ZLE_RPROMPT_INDENT=0
У версіях ZSH, що ведуть до 5.0.2, значення у вихідному коді ЗSH, який називається rprompt_off
(який встановлює зміщення правої межі), було важко закодовано 1
.
Але у версії 5.0.5 розробники додали можливість змінити це значення за замовчуванням, встановивши ZLE_RPROMPT_INDENT
змінну середовища.
Обгрунтування для цього «відступу» тому , що деякі старі термінали почнуть скролінг , якщо останній осередок дисплея мала характер в ньому.
Якщо ви користуєтеся старішою версією ZSH і не можете оновити, ви все одно можете позбутися цього простору, виконавши обидві дії:
%{...%}
%{terminfo[cub1]}
Перегляньте поширені запитання та це повідомлення у списку розсилки для отримання додаткової інформації.
%git<Tab>
перетворюється на%ggit
Я надіслав звіт про помилки у службовців zsh, але, схоже, така поведінка є дизайном. Однак ця проблема мене настільки роздратувала, що я вирішив виправити і скласти zsh як тимчасове виправлення. Якщо ви перебуваєте на OS X і використовуєте Homebrew (вам слід), ви можете встановити zsh, включаючи мій патч, запустивши:
brew install https://gist.github.com/padde/7963205/raw/eaedcc557859a40db87282fc39256fccd52d0aad/zsh.rb
ви, ймовірно, захочете додати /usr/local/bin/zsh
до нього /etc/shells
та chsh -s /usr/local/bin/zsh
після цього. Нарешті, ось найрізноманітніша версія для всіх, хто зацікавлений:
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;
/*
Я думаю, що білий простір праворуч жорсткий. Але ви можете обдурити zsh
за допомогою наступних налаштувань:
RPROMPT="%{*%}"
що в принципі говорить про zsh
те, що зірка не займає персонажів; від man zshmisc
:
%{...%}
Включіть рядок як буквальну послідовність відходу. Рядок у дужках не повинен змінювати положення курсору. (...)
Недолік полягає в тому, що ви "зміщуєте" бланк на кінець PROMPT
:
| PROMPT = "#" | | RPROMPT = "% {*%}" | | # ■ * |
Ці |
символи позначають кінцеві ребра, ■ курсор.
Ще однією ідеєю було б збільшити COLUMNS
на 1:
COLUMNS=$((COLUMNS + 1))
Але треба придумати спосіб, як це зробити лише для швидкого відображення, але не для команд. І це проковтне останній символ у кожному рядку в багаторядковому командному рядку.