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


121

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

回答:


57

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

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

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

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


3
.zshrcでPROMPT = '[%!]'を使用しています。どうやって色付けできますか?.zshrcでPROMPT = '\ e [0; 31m [%!] \ e [0m'を実行できませんでした。
レオ・レオポルド・ヘルツ준 영

3
@ erikb85:なぜそれが間違っていると言うのですか?答えを改善するために私ができることはありますか?私にとって、上記を実行すると赤いドル記号が表示されるので、なぜそれが間違っていると思うのかわかりません。
Bryan Oakley

4
動作していますが、文字列の前の$はzshrcを誤動作させます。表を使用すると、テキストが左側に表示されます。私は@Joe the Personの答えを好む
メビウス

1
@メビウス私がこれを機能させたかったのは明らかでシンプルでしたが、CDのタブが完全にめちゃくちゃになっていることに同意します
diek

2
私はzshがクレイジーな奇妙なANSIエスケープものを必要としないと思った...より良い答えがあるに違いない...
チャーリーパーカー

264

これを入れてください~/.zshrc

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

サポートされている色:
redbluegreencyanyellowmagentablack、& white(からこの回答)別のコンピュータは、異なる有効なオプションを持っているかもしれません。

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

さらに、これは、これをここからディレクトリトリミングで動作させる方法です。

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

3
はるかに優れた回答であることに同意しました(幸いにもこの回答は3番目のGoogleの結果でした;)
new123456 2010年

3
私のために働いていません。:(zsh: colors: function definition file not found
balki

ZSH4を使用していますか?4.3.11より前のバージョンでは動作しないと思います。最新バージョンを使用している場合は、適切なファイルを使用していない可能性があります。
Joe the Person

有効な色の値は何ですか?
chakrit

12
これ%{...%}は、コンテンツがリテラルエスケープシーケンスとして解釈されるため、シーケンスの印刷中にカーソルが移動しないことを意味します。これを使用しないと、カラーコードによって実際にカーソルが移動し、望ましくない効果が生じる可能性があります。これはVisual Effectszshmisc manページの
Bruno Penteado

69

Zshにはカラープロンプトが組み込まれています。試す

autoload -U promptinit && promptinit

次にprompt -l、利用可能なプロンプトを一覧表示-p fireし、「fire」プロンプトをプレビューして-s fire設定します。

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

prompt fade red

すべてのテーマに色を付ける方法はありますか?私はウォルターズのプロンプトが好きですが、赤でお願いします。
Pat Myron

24

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

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

FireDudeの回答と同じ結果を達成します。詳細については、ZSHのドキュメントを参照してください。


ご参考までに。Ubunutu 11.04を試してみましたが、色がなければ機能しませんでしたautoload -U colors && colors
dpc.pw

2
変だ。OS XとUbuntu 10.04で動作します。
アンドリューマーシャル

@Andrew Marshallはい。ただし、autoload上で作業する可能性が高くなります。
Joe the Person

@ fireDude67設定方法はautoload on
バルキ2011

1
が必要ない場合はautoload -U colors、ディストリビューションが他のzsh初期化ファイルにすでにそれを持っていることを意味します。他の人と共有するつもりのスクリプトには、それを含める必要があります。
キンドール

23

利用できる色:

for i in {1..256}; do print -P "%F{$i}Color : $i"; done;

                                      


利用可能な変数:

  • %F{118} (1から256)
  • $FG[018] (1から256)
  • $fg[magenta] (マゼンタ、赤、白、黄、黒、青、シアン、緑)

プロンプトの例:

PS1='%(?.%F{green}.%F{green})%n@%m:%~%# %f'

キャプチャー

PS1='%{$fg[gray]%}[%T][%n@%m%{$reset_color%}:%c%{$reset_color%}%{$fg[gray]%}$(git_prompt_info)]$(prompt_char)%{$reset_color%} ' 

キャプチャー


インストール:

変数定義(PS1 / PROMPT)を追加する必要があります ~/.zshrc

現在のプロンプトでPS1変数を再定義して、すぐにテストすることもできます(変更は保存されません)。


15

上記のBryan Oakleyの回答にはすでに指摘されている問題があり、Andrew Marshallが提供する解決策には問題がありませんが、使用されている色のカスタマイズが多すぎることは明らかではありません。

macOS Catalinaは今後zshをデフォルトのシェルにするように要求するので、さらに多くの人々がプロンプトをカスタマイズしたいと思うかもしれませんし、答えのためにここに来るかもしれません。したがって、私はより広い要約を提供し、より多くのカスタマイズを可能にする他の非常に密接に関連する概念に触れようとするつもりだと思いました。

さまざまな色の3桁のコード。 まず、さまざまな色の3桁のコードをここで確認できます:https : //unix.stackexchange.com/a/124409/194343。たとえば、214はある種のオレンジ色です。

前景と背景。 他の重要な情報は、F oregroundとbac Kの地色の場合、FKでそれぞれ何が必要かを定義できるということです。ソースは視覚効果に関するzshマニュアルです:http : //zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Visual-effects

したがって、たとえば、次の2つのコマンド

autoload -U colors && colors
export PS1="%F{214}%K{000}%m%F{015}%K{000}:%F{039}%K{000}%~%F{015}%K{000}\$ "

ホスト名をオレンジ色に黒の背景で表示し、コロンを白で黒の背景で表示し、現在の作業ディレクトリを明るい青で黒の背景で表示し、ドル記号を白で黒の背景で表示します。

関連情報は以下にあります。

右側のプロンプト情報。たとえば、タイムスタンプを追加します。https://superuser.com/a/1251045/290299を参照してください。もちろん、これは色分けできます。たとえば、次のように、水色/紫がかった色を使用できます。

RPROMPT="%F{111}%K{000}[%D{%f/%m/%y}|%@]"

の色lslsのマニュアルを読んだ後、たとえばls、次の2つのコマンドを使用して色をアクティブにすることができます。

export CLICOLOR=1
export LSCOLORS=gafacadabaegedabagacad

最後に、自分の構成に満足しているためテストしなかった最後のコメントとして、別の方法として、誰かがMacPortscoreutilsからポートをインストールして使用することができます(ソース:https : //unix.stackexchange.com/a/174596 / 194343)。(上記はすべて、日常生活をより楽しく、扱いやすくするための関連部分であるため、この最後の部分を編集する可能性があります。)gdircolors


1
これは非常に役立つ回答です。これをまとめてくれてありがとう。
shaunakde

@shaunakdeどういたしまして!:)
MightyMouse

4

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

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

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


2

最後のコマンドの終了ステータスに応じた色のプロンプトを表示するには、次のように使用できます。

PS1='%(?.%F{green}.%F{red})%n@%m:%~%# %f'

この行をに追加するだけ~/.zshrcです。

ドキュメントには、可能なプレースホルダを示しています。


これがここでの最善の解決策です。どうもありがとうございました。
Eddy Ekofo

2

私のお気に入りを試してください:入れて

~/.zshrc

この行:

PROMPT='%F{240}%n%F{red}@%F{green}%m:%F{141}%d$ %F{reset}'

忘れないで

source ~/.zshrc

変更をテストする

もちろん色/カラーコードを変更できます:-)


0

zshallを実行してPROMPT EXPANSIONを検索します

ここで既存の回答を読んだ後、それらのいくつかは矛盾しています。私は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

上記のすべての回答を補足するもう1つの便利なトリックは、カラープロンプト設定をzsh関数に配置することです。そこで、ローカル変数をrc=$reset_color定義して、長いコマンドのエイリアスを作成したり、独自のカラー変数を定義したりできます。それを.zshrcファイルに配置して、定義した関数を呼び出すことを忘れないでください。

# Coloured prompt
autoload -U colors && colors
function myprompt {
  local rc=$reset_color
  export PS1="%F{cyan}%n%{$rc%}@%F{green}%m%{$rc%}:%F{magenta}%~%{$rc%}%# "
}
myprompt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.