パイプ記号の前にzshがスペースを食べるのをどのように停止しますか?


17

'|'zshコマンドラインでスペースを入力し、その後にパイプ記号を入力すると、zshはスペースを消費し、パイプ記号を前の単語に対して直接配置します。どうすればそれをやめられますか?文体上の慣習については定かではありませんが、読みやすくするためにパイプシンボルの両側にスペースが必要です。私はほとんどすぐにoh-my-zshを使用しています。

解決

以下のmpyの回答に基づいて、次のソリューションを使用しました。

デフォルトでは、ZLE_REMOVE_SUFFIX_CHARSはzsh / ohmyzshで未定義です。未定義の場合、次のように動作します。

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

〜/ .zshrcに次の定義を追加しました。

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(パイプを除くすべて)およびpresto、完璧!問題はなくなりました。


1
最初にzsh -f(設定の読み込みをスキップするため)を使用してこれを再試行します。zshはもうそれを行わないことに気付くでしょう。次に、oh-my-zshを(ほとんどの場合)掘り下げて、それが原因である理由を把握する必要があります;
フランシスコ

回答:


17

TABコマンド/ファイル名を完了するとスペースが自動的に追加されますが、押す|と再び消えることを意味すると思います。そうしないと、その効果を再現できません。

ただし、その場合、ソリューションは次のように単純でなければなりません

ZLE_REMOVE_SUFFIX_CHARS=""

説明はややトリッキーなので、私は単に引用します man zshparam

ZLE_REMOVE_SUFFIX_CHARS/ ZLE_SPACE_SUFFIX_CHARS これらのパラメーターは、ラインエディターで使用されます。特定の状況では、次の編集コマンドが挿入可能な文字ではなかったか、文字に接尾辞の削除が必要とマークされたため、補完システムによって追加された接尾辞(通常はスペースまたはスラッシュ)は自動的に削除されます。

これらの変数には、接尾辞を削除する文字のセットを含めることができます。ZLE_REMOVE_SUFFIX_CHARS が設定されている場合 、これらの文字により接尾辞が削除されます。ZLE_SPACE_SUFFIX_CHARSが設定されている場合、これらの文字により接尾辞が削除され、スペースに置き換えられます。

ZLE_REMOVE_SUFFIX_CHARSが設定されていない場合、デフォルトの動作は次と同等です。

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

場合はZLE_REMOVE_SUFFIX_CHARS設定されているが空で、何の文字は、この動作を持っていません。 ZLE_SPACE_SUFFIX_CHARS 優先されるため、次のようになります。

ZLE_SPACE_SUFFIX_CHARS=$'&|'

文字&を生成|し、サフィックスを削除しますが、スペースに置き換えます。

違いを説明するために、オプションAUTO_REMOVE_SLASHが有効であり、ディレクトリDIRが追加された直後に追加され/、その後にユーザーが入力するとします&。デフォルトの結果はDIR&です。ZLE_REMOVE_SUFFIX_CHARSsetを使用し ますが&、結果は含めませんDIR/&ZLE_SPACE_SUFFIX_CHARS含まれるように設定され&た結果ですDIR &

特定の補完は、ここで説明する値をオーバーライドする独自の接尾辞の削除または置換の動作を提供する場合があることに注意してください。


はい、あなたがそれを言及するまで気づいていませんでしたが、それはタブ完了後にのみ起こります、答えのおかげで、これは私に必要なものを与えてくれます:)
scanny
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.