zsh のタブ補完で文字が重複する

zsh のタブ補完で文字が重複する

比較的新しいアーキテクチャのインストールで、ohmyzsh を使用して zsh でタブ補完を使用すると、最初の 2 文字が重複し、削除できなくなります。

たとえば、yay -S terminatoと入力してタブを押すと、ターミネータまで自動補完されますよね? 正常に動作し、通常どおりタブで結果を確認できますが、行の先頭がyay -S term...ではなく になります。yayay -S term...

エラーを修正するためにバックスペースを押したところ、 より後ろを削除できず、先頭にyayが残ってしまい、削除できませんでした。ya

これは 1 行のみに適用され、実際には何も影響しません。不適切な 2 つの文字があっても、コマンドは適切に実行されます。

他のエミュレーターも試しましたが、ベース tty でも問題は解決しません。

Enter キーを押すか、Ctrl + C を押して次の行に移動すると、新しい行はリセットされますが、古い行はぶら下がり文字とともに残ります。

明確に言うと、これは yay だけでなく、タブ補完を使用するすべてのコマンドで発生します。

答え1

これは、何らかのエラーが印刷されたが、エラー メッセージによって印刷された文字のせいで、コマンド ラインがエラーの上に、多少間違った場所に再描画されたことを意味します。

最初の文字を削除できない理由yaは、それが上書きされた古いコマンド ラインの一部だからです。これは実際には新しいコマンド ラインの一部ではないため、編集できません。言い換えると、端末に印刷されて消去されなかった文字があり、シェルはそれについて何も知らないのです。

このエラーの原因を突き止めるには、

set -vx

次に、同じ補完をもう一度試して、出力のどこかにエラー メッセージが表示されるかどうかを確認します。

答え2

私も同じ問題を抱えていました。確かに、それは上で述べたようにロケール設定に関連していました。

ロケールを再生成することで解決しました。

sudo echo en_US.UTF-8 UTF-8 > /etc/locale.gen
sudo locale-gen

再起動後、正常に動作するようになりました。

答え3

私も同じような問題を抱えていましたが、同じように現れました。 の問題を の値まで追跡しました。 (および関連項目) を としてLC_ALLエクスポートするのをやめてをエクスポートしたところ、問題は解消しました。LC_ALLCLANG=en_US.UTF-8

私は問題をZsh、tmux、特定のoh-my-zshテーマ. (robbeyrussellは oh-my-zsh の最初の作成者だったと思うので、パンくずリストは「公式」GitHub 組織につながるようになりました)

参照:

関連情報