Answers:
您需要做的就是将其放入您的~/.zshrc
(或与提示主题相同的文件中):
ZLE_RPROMPT_INDENT=0
在ZSH的版本(最高为5.0.2)中,ZSH的C源代码中的一个值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))
但是,人们必须考虑一种方法,该方法仅针对即时渲染而不针对命令执行此操作。这将吞噬多行命令行中每行的最后一个字符。