Ответы:
Все, что вам нужно сделать, это поместить это в свой файл ~/.zshrc
(или в тот же файл, что и тема приглашения):
ZLE_RPROMPT_INDENT=0
В версиях ZSH, ведущих до 5.0.2, значение в исходном коде C языка ZSH rprompt_off
(которое устанавливает смещение правого поля) было жестко запрограммировано 1
.
Но в версии 5.0.5 разработчики добавили возможность переопределить это значение по умолчанию, установив ZLE_RPROMPT_INDENT
переменную среды.
Обоснование для этого «отступа» потому , что некоторые старые терминалы начнут скроллинг , если последняя ячейка дисплея имела характер в нем.
Если вы используете старую версию ZSH и не можете обновить ее, вы все равно можете избавиться от этого места, выполнив оба следующих действия:
%{...%}
%{terminfo[cub1]}
Проверьте FAQ и это сообщение в списке рассылки для получения дополнительной информации.
%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
:
%{...%}
Включите строку как буквальную escape-последовательность. Строка в фигурных скобках не должна менять позицию курсора. (...)
Недостаток в том, что вы «сдвигаете» пробел до конца PROMPT
:
| PROMPT = "#" | | RPROMPT = "% {*%}" | | # ■ * |
Эти |
символы обозначают концевые ребра, ■ курсор.
Другая идея заключается в увеличении COLUMNS
на 1:
COLUMNS=$((COLUMNS + 1))
Но нужно придумать, как это сделать только для быстрого рендеринга, но не для команд. И это поглотит последний символ в каждой строке многострочной командной строки.