27

私はOSXMountain Lionを使用しており、付属のZSHシェル(4.3.11)を実行しており、その上にOh-My-ZSHがインストールされています。

homebrewなどのコマンドでタブ補完を使用する場合、ZSHが使用可能なコマンドを一覧表示すると、コマンドも複製されます。例えば:

$ brew {tab}

結果は次のようになります。

$ brew brew 
[list of homebrew commands]

ターミナルウィンドウのサイズを変更すると、コマンド名の最初のインスタンスが表示されなくなるため、このエラーの原因がわかりません。

重複が表示されているときにバックスペースを押すと、コマンドの2番目のインスタンスしか削除できません。zshはそれ以上バックスペースを許可しません。また、バックスペースを使用して重複を削除すると、zshはコマンドがまったく入力されていないかのように動作します。

私の.zshrcと他のすべての.configurationファイルは、https://github.com/daviesjamie/dotfilesにあります。

更新: Ubuntuで同じ問題を抱えている人についてのこの投稿を見つけました。しかし、私は与えられた解決策を理解していません、そしてそれが私のセットアップに適用されるかどうかさえわかりませんか?

4

6 に答える 6

31

この効果は、矢印や「gitbranch」文字などの派手なUTF-8文字を使用した場合にも再現できます。

この文字をプロンプトから削除するだけで、重複は発生しません。

また追加

エクスポートLC_ALL=en_US.UTF-8
エクスポートLANG=en_US.UTF-8

〜/.profileに役立ちます

于 2014-04-01T07:32:15.037 に答える
30

この問題は、%{ %}内部のテキストの幅がゼロであることをzshに通知する角かっこが間違っているために発生する可能性があります。それらで囲む必要があるのは、テキストの色や太字を変更するエスケープシーケンスだけです。新しいzsh(> = 4.3。{不明なバージョン})を使用している場合は、またはそこにあるものの代わりに%F{color}...%f、を使用することをお勧めします。%K{color}...%k%B...%b%{${fg[green]}%}

それらの問題は、「ねえ、私はいくつかのテキストを出力しました。カーソルは今どこにありますか?」zshは、プロンプトの長さを単独で計算する必要があります。テキストを入力してzshに完了を要求すると、zshはターミナルにカーソルを特定の場所に移動し、そこに完了したコマンドラインを入力するように指示します。ブラケットの位置が間違っ%{%}ていると、この特定の場所は間違っています。

于 2012-08-11T18:27:24.267 に答える
12

MacでiTermを使用する場合は、プロファイル設定で[ロケール変数を自動的に設定する]を必ずオンにしてください。SSH接続のチェックを外したところ、同じバグが発生し、そのオプションをオンのままにして修正しました。

于 2015-04-06T13:05:36.080 に答える
11

これは古いスレッドですが、oh-my-zsh構成を使用したzshセットアップで同様の問題に直面しました。

設定export LC_ALL=en_US.UTF-8すると問題が修正されました。

于 2014-07-01T11:30:58.280 に答える
5

多くの場所での多くの回答がexport LC_ALL=en_US.UTF-8解決策を示唆しています。しかし、これは私にはうまくいきませんでした。Arch linuxとPopOSの両方でoh-my-zshを使用して、この問題が引き続き発生しました。

私のために働いた唯一の解決策は、oh-my-zshgithubリポジトリの問題に関するromkatvによるこの提案でした。

少なくとも私の場合、オートコンプリートの複製の問題は、行のどこかに非ASCII文字(絵文字など)がある場合にのみ発生することがわかりました。また、ZSHは、この非ASCII文字が1文字ではなく2文字のスペースを取る必要があると誤って想定していました。

したがって、機能した解決策は、使用しているテーマのファイルを開き.zsh-theme、すべての非ASCII文字を検索し%{%G%}、その文字に1つの文字幅のみを使用するようにZSHに指示することでした。

たとえば、デフォルトのoh-my-zshテーマrobbyrusselには2つの非ASCII文字が含まれています。プロンプトの「➜」文字

PROMPT="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"

gitディレクトリのプロンプトの「✗」文字

ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✗"

%{%G<character>%}このように2つの非ASCII文字を使用する

PROMPT="%(?:%{$fg_bold[green]%}%{%G➜%} :%{$fg_bold[red]%}%{%G➜%} )"

この

ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}%{%G✗%}"

私にとって最終的に問題を修正したのはそれです。

したがって、使用するテーマファイルのコピーを作成し、上記のようにすべての非ASCII文字を編集するだけで、重複の問題が二度と発生しないことを願っています。

于 2019-10-02T06:52:33.100 に答える
0

ローカルとsshの両方を機能させるための私の解決策は、@Marcと@neotohinの答えの組み合わせのようなものです。

  1. セットexport LANG=en_US.UTF-8(テンプレート.zshrcのその部分のコメントを解除するだけです。LC_ALL@ neotohinの回答のように、エクスポートLANGも機能する可能性がありますが、試しませんでした)
  2. ターミナルプロファイルの[詳細設定]セクションで[起動時にロケール環境変数を設定する]のチェックを外します(理由:設定がLC_CTYPE=UTF-8代わりに設定en_US.UTF-8され、sshでロケールがブレーキされます)
于 2017-04-20T07:45:53.207 に答える