プラグインを使わず、プロンプトをかっこよく(zsh)
こんにちは、nechinechiです。
今回はzshにおいて、oh-my-zsh
などのプラグインなくして、かっこいいプロンプトを作る方法を紹介します。
これを知っておくと、プラグインなどでは提供されていない形式で、自分の好きにプロンプトを変えらます。
また、プラグインを使うとzshの反応が遅くなってしまうと書かれた記事を目にすることがあります。特に、oh-my-zsh
は特によく目にします。私もoh-my-zsh
を使って、プロンプトを変えたことがありましたが、起動が遅かったりしていました。なので、そのような問題も解決してくれると思います。
はじめに
ここでは最終的に、以下のようなプロンプトができます。
何がかっこいいのか
私がこのプロンプトでかっこいいと思う点は、以下のような点です。
- ユーザ名やカレントディレクトリの表示部分で、背景がシャープになってる
- ブランチの表示の部分にあるマーク
左側のプロンプトでは、色を256色から選択している
選択できる色は、以下のコマンドで確認できます。(こちらより)for c in {000..255}; do echo -n "\e[38;5;${c}m $c" ; [ $(($c%16)) -eq 15 ] && echo;done;echo
実際の実行画面。
準備
私は、以下の環境、ソフトウェアなどを用いました。
- OS: Windows 8.1
- ターミナル: Cygwin
- フォント: Ricty for Powerline
ブランチ表示の部分のマークや、背景をシャープにしている部分では、Unicodeで特殊な文字を使用しているため、それに対応していなければなりません。
コマンドラインで、以下のようにコマンドを打って、同じ結果となれば、同じフォントでなくても、問題ありません。
また、Ricty for Powerline
でUnicodeの全ての文字が表示できるという意味ではありません。ただ、このフォントは半角と全角文字の比が 1:2 で、文字の区別もつきやすいため、私は好んで使っています。
実際にやってみる
では、実際にやっていきましょう。
以下のように説明していきます。
- gitのブランチ表示
- 256色を使う方法
- 背景色をシャープに表示
gitのブランチ表示
ブランチの表示そのものに関しては、以下をご覧ください。こちらの4行目以降の、右プロンプトの設定部分のみを利用します。
その設定部分をright_prompt.zsh
などの名前のファイルにコピーします。そして、.zshrc
から、source
を使って、そのファイルを読み込むようにします。
それでは、right_prompt.zsh
に対して、変更を加えます。
そして、以下に示す各行をそれぞれ以下のように編集します。
- 5L:
RPROMPT=$'`branch-status-check` %~'
→RPROMPT=$'`branch-status-check`
元はカレントディレクトリが表示されるようになってますが、カレントディレクトリの表示は消しています。 - 25L:
echo ${prefix}${branchname}${suffix}
→echo ${prefix}'\ue0a0 '${branchname}${suffix}
ブランチのマークが表示されるように変更を加えています。
以上で、gitブランチを表示してる部分は完成です。
256色を使う方法
256色から色を選択する場合は、%{^[[38;5;xxxm%}
のようにします。xxx
の部分は、0~255
の数字が入ります。また、^[
の部分は特殊な文字で、Ctrl-v
を押して、それに続けてESC
を押すことで入力できます。
色を選ぶ場合には、始めの方にも書きましたが、以下のコマンドを実行して、出力された中から好きな色の数字をxxx
の部分に当てはめるのが良いと思います。
for c in {000..255}; do echo -n "\e[38;5;${c}m $c" ; [ $(($c%16)) -eq 15 ] && echo;done;echo
また、背景色を指定する場合には、%{^[[30;48;5;xxxm%}
のようにします。
また、色のリセットをする場合は、%{^[[0m%}
のようにします。この場合も^[
の部分は特殊文字です。
例えば、以下のように左プロンプトを設定すると、下の画像のように表示されるようになります。
PROMPT='%{^[[30;48;5;237m%}%{^[[38;5;178m%}%n@%m %{^[[30;48;5;067m%}%{^[[38;5;007m%}%~%{^[[0m%}
背景色をシャープに表示
背景色をシャープに表示する場合には、以下のコマンドを実行して表示される三角形を利用します。つまり実際には、背景をとがらせてるのではなく、背景と同じ色の三角形を続けて表示することで、背景をシャープに表示見せています。
つまり、
から
にするには、以下のようにします。
- ユーザ・ホスト名部分
- ユーザ・ホスト名の表示部分の背景色と同色の三角を続けて表示
- このとき、三角の背景色には、次のカレントディレクトリを表示してる部分の背景色と同じ色を選択
- カレントディレクトリ部分
- カレントディレクトリの表示部分が終わった後に、色をリセットする
- リセット直後に、背景色と同色の三角を表示する
以上を、コードにすると以下のようになります。このコードを、left_prompt.zsh
などの名前を付け多ファイルに保存し、.zshrc
から読み込むようにすると、.zshrc
もコードがみやすいと思います。また、処理は全てleft-prompt
という関数で行うようになっています。
PROMPT='`left-prompt`' function left-prompt { FIRST='178m%}' FIRST_B='237m%}' SECOND='007m%}' SECOND_B='067m%}' sharp='\uE0B0' FG='%{^[[38;5;' BG='%{^[[30;48;5;' RESET='%{^[[0m%}' USER_AND_HOST="${BG}${FIRST_B}${FG}${FIRST}" DIR="${BG}${SECOND_B}${FG}${SECOND}" echo "${USER_AND_HOST}%n@%m${BG}${SECOND_B}${FG}${FIRST_B}${sharp} ${DIR}%~${RESET}${FG}${SECOND_B}${sharp} ${RESET}" }
何度も繰り返しますが、^[
の部分は特殊文字です。Ctrl-v
を押して、それに続けてESC
を押すことで入力できます。
以下のコードでは、色の変更が楽なように、FIRST
、FIRST_B
でユーザ・ホスト名の文字色と背景色をそれぞれ指定しています。SECOND
、SECOND_B
では、カレントディレクトリの文字色と背景色をそれぞれ指定しています。
その下のsharp
には三角形の文字コードを、FG
、FB
にはそれぞれ、文字色、背景色を指定するときの、始めの部分の文字列を入れています。RESET
には、色をリセットする文字列を入れてます。
USER_AND_HOST
、DIR
には後のecho
文で、少しでも見やすくするため、文字を表示する部分の、背景色と文字色を入れています。
最後に、echo
文で返される値をPROMPT
に入れて表示してます。このようにしておかなければ、三角形がうまく表示されません。例えば、PROMPT='\uE0B0'
とすると、ぷろんぷとに'\uE0B0'という文字列が表示されるだけになってしまいます。
完成
以上を終えると、始めの方にもお見せした、以下のようなプロンプトができあがります。
終わりに
プロンプトを自分好みに変更すると、気分も上がりますし、今どのサーバにいるかなど見やすくもなります。
プロンプトは、人それぞれで個性が大きく出ると思うので、自分の好きに、使いやすいようにしておくのがいいと思います。
ここでは簡単なプロンプト表示を例としました。rbenv
やnvm
を使っている場合は、rubyやnodeのバージョンを表示すると、今がどのバージョンなのか、すぐにわかるようになります。
ぜひ、設定をいじりながら、プロンプトを自分好みに変えていってください。