web-dev-qa-db-ja.com

(通常のテキストとは異なる)zshでプロンプトの色を変更するにはどうすればよいですか?

コマンドラインでの出力の開始と終了をよりよく認識するために、プロンプトの色を変更して、プログラムの出力と視覚的に異なるようにします。 zshを使用しているときに、誰かがヒントをくれますか?

84
Mnementh

赤いプロンプトを設定する方法の例を次に示します。

PS1=$'\e[0;31m$ \e[0m'

魔法は\e[0;31m(赤い前景をオンにする)および\e[0m(文字属性をオフにします)。これらはエスケープシーケンスと呼ばれます。エスケープシーケンスが異なると、カーソルの絶対位置から色、ウィンドウのタイトルバーの変更など、さまざまな結果が得られます。

エスケープシーケンスの詳細については、 ANSIエスケープコードに関するウィキペディアのエントリ を参照してください。

43
Bryan Oakley

これを~/.zshrcに入れます:

autoload -U colors && colors
PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%~ %{$reset_color%}%% "

サポートされている色:
赤、青、緑、シアン、黄、マゼンタ、白黒( この回答 から).

%{....%}でカラーコード(およびその他の印刷できない文字)を囲みます。これは、テキストの折り返しが正しく機能するためです。

さらに、これを here からのディレクトリトリミングで動作させる方法を次に示します。

PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%(5~|%-1~/.../%3~|%4~) %{$reset_color%}%% "
219
Joe the Person

Zshには色付きのプロンプトが組み込まれています。試して

autoload -U promptinit && promptinit

その後 Prompt -l使用可能なプロンプトのリスト、-p fire「火災」プロンプトをプレビュー、-s fireはそれを設定します。

プロンプトを追加する準備ができたら、上のオートロード行の下に次のようなものを追加します。

Prompt fade red
51
Mitro

私はautoload -U colors && colorsがもう必要ないとは思わず、簡単にできます:

PS1="%{%F{red}%}%n%{%f%}@%{%F{blue}%}%m %{%F{yellow}%}%~ %{$%f%}%% "

FireDudeの答え と同じ結果を達成します。詳細については、 ZSH documentation を参照してください。

17
Andrew Marshall

Zsh5(Debian Jessieのデフォルト)を使用すると、これらすべてのソリューションが機能することがわかりました。

  • $'\e[00m
  • $fg[white]
  • $fg{white}

今、彼らには問題があります:彼らはカーソルを動かし、タブ移動時にいデカールをもたらします(自動補完のため)。解決策は、エスケープシーケンスを%{FOOBAR%}で囲むことです。これを理解するためにしばらく時間がかかりました。 2番目と3番目のソリューションの場合、colorsモジュールのロードは必須です。最初のソリューションを読みやすくするには、使用する色の変数を定義するだけです。

4
user3459474

man zshallとプロンプト拡張の検索

ここで既存の回答を読んだ後、それらのいくつかは矛盾しています。 zsh 4.2および5+を実行しているシステムでさまざまなアプローチを試しましたが、これらの答えが矛盾する理由は、対象となるZSHのバージョンが示されていないためです。バージョンごとに異なる構文が使用され、一部のバージョンではさまざまなオートロードが必要です。

したがって、おそらく最善の方法は、zshallを実行し、Prompt EXPANSIONを検索して、特定のzshインストールのすべてのルールを見つけることです。コメントで注意してください、「私はUbuntu 11.04または10.4またはOSXを使用しています」のようなものは、使用しているZSHのバージョンが不明であるため、あまり意味がありません。 Ubuntu 11.04は、ubuntu 10.04よりも新しいバージョンのZSHを意味するものではありません。古いバージョンがインストールされた理由はいくつかあります。さらに言えば、新しいバージョンのZSHは、どのバージョンのZSHかを知らなくても、どの構文を使用するかを意味しません。

0
cs_alumnus