Zshでは、右側のプロンプトの右側に常にスペース文字があります。私は次のような非常に単純な.zshrcを試してみました:
Prompt="#"
RPROMPT="*"
画面右側の*の後には常にスペースがあります。
これは問題を示すスクリーンショットです(私は行の1つでスペースを選択しました)。
ありがとう。
これを~/.zshrc
(または、プロンプトテーマと同じファイル)に配置するだけです。
ZLE_RPROMPT_INDENT=0
5.0.2 までのZSHのバージョンでは、rprompt_off
(右マージンオフセットを設定)と呼ばれるZSHのCソースコードの値が1
にハードコーディングされていました。
しかし 5.0.5 リリースでは、開発者はZLE_RPROMPT_INDENT
環境変数を設定してこのデフォルト値を上書きする機能を追加しました。
この「インデント」の rationale は、ディスプレイの最後のセルに文字が含まれている場合、一部の古い端末がスクロールを開始するためです。
古いバージョンのZSHを使用していて更新できない場合でも、次の両方を実行することでそのスペースを取り除くことができます。
%{...%}
%{terminfo[cub1]}
詳細については、メーリングリストの [〜#〜] faq [〜#〜] および このメッセージ を確認してください。
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
の末尾に「シフト」することです。
|プロンプト= "#" | | RPROMPT = "%{*%}" | |#■* |
|
記号は、終端エッジ、■カーソルを示します。
もう1つのアイデアは、COLUMNS
を1ずつ増やすことです。
COLUMNS=$((COLUMNS + 1))
しかし、これをどのようにしてプロンプトレンダリングのみに実行し、コマンドには実行しないかを考える必要があります。そして、これは複数行のコマンドラインの各行の最後の文字を飲み込みます。