답변:
당신이해야 할 일은 이것을 당신의 ~/.zshrc
(또는 프롬프트 테마와 같은 파일에 ) 넣는 것입니다 .
ZLE_RPROMPT_INDENT=0
최대 5.0.2 로 이어지는 ZSH 버전에서 rprompt_off
(오른쪽 여백 오프셋을 설정하는) ZSH C 소스 코드의 값 은 다음과 같이 하드 코딩되었습니다.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가 있습니다.
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))
그러나 명령 렌더링이 아닌 프롬프트 렌더링에만이 작업을 수행하는 방법을 고려해야합니다. 그리고 이것은 여러 줄 명령 줄에서 각 줄의 마지막 문자를 삼킬 것입니다.