私はrobbyrussellテーマがロードされたArchLinuxでoh-my-zshを使用しています。タブを完成させようとすると、プロンプトに残りの文字が追加されてしまいます。自動補完された文字を削除しても、残りの文字は削除されません。
たとえば、次のように入力した場合:
~ /etc
次にタブ、それはに変わります
~ /e/etc/
以下のオプションのリストがあります。 /etc/
を削除しても、/e
は残り、次の問題が発生します。
~ /e
/e
を削除できません。残りの文字を取り除くためにコマンドを実行する必要があります。
ここで何が起こっているのか分かりますか?
ロケールの問題であることが判明しました。設定ファイルをどこかで削除して再実行するまで、locale-genの実行は機能しませんでした。
しかし、あなたのアドバイスはプロンプトにとっては良いことです。ありがとうございました。
ロケール構成と非UTF8構成に問題があったようです
私の場合、修正は次のとおりです。
export LC_ALL="en_US.UTF-8"
.zshrcに行を追加して永続的にします。
echo "export LC_ALL=en_US.UTF-8" >> .zshrc
Ubuntuドキュメントの詳細情報 https://help.ubuntu.com/community/Locale
Simontが示唆しているように、使用しているプロンプトは印刷できない文字(カラーエスケープコードなど)を使用している可能性がありますが、それらの文字が印刷できないことを示しているわけではありません。したがって、プロンプトが再描画されると、端末はプロンプトが実際よりも広いと信じます。
%{
および%}
区切り文字を使用して、zshプロンプトの文字シーケンスの幅がゼロであることを示します。たとえば、私のプロンプトは次のとおりです。
%{%(?.%F{green}.%F{red})%}➜%{%f%}
(?...)
は、プロンプトの色を設定する3値であり、幅がゼロであることを示すためにマークアップされています。同様に、%f
は色をリセットし、それもマークアップされています。
PS1変数を更新することで、プロンプトへの変更をテストできるため、さまざまな配置を試して、何が効果的かを確認できます。
この方法でany文字をマークできるので、プロンプトを短くしすぎないように注意してください。
私は同じ問題を抱えていたので、解決策を探しているときにこの記事に遭遇しました: https://wiki.archlinux.org/index.php/Locale
そして、提案されたように、システム全体で一部のロケールを有効にするには、たとえば、私の場合、/etc/locale.gen
で目的のロケールのコメントを解除する必要があります。
en_US.UTF-8 UTF-8
ファイルに変更を保存した後、コマンドラインで(rootとして)実行します。
locale-gen
再起動すると、機能します。 (少なくとも私にとっては)
同様の問題がありましたが、oh-my-zshではなくpromptlineでした。私にとっての解決策は、構成から削除することでした。
ZLE_Prompt_INDENT=0
テーマtjkirch_modでも、同様の問題が発生しました。ダーティなgitリポジトリで作業していて、タブ補完を使用しているときはいつでも、行の最初の文字が複製されていました。 git repoの状態を示す文字を変更すると、問題が解決しました。かわった
ZSH_THEME_GIT_Prompt_DIRTY = "%{$ fg [red]%}⚡"
に
ZSH_THEME_GIT_Prompt_DIRTY = "%{$ fg [red]%} x"