この記事は、サイバーウェーブ Advent Calendar 2019 の23日目の記事です。
最近、ちょっと気分を変えたいと思いターミナルのプロンプトを更新したので、その時にやったことを小ネタとしてまとめます。
僕の現在のターミナルはこんな感じになっています。
今このプロンプトを使っていて、
- 2行プロンプトかつ、出力の後に1行空く
- 普通は
$
となる部分がスタイリッシュ - 自分が今いるディレクトリや入力したコマンドによって絵文字表示が変わる
なところが気に入っています。
それぞれについて、どのように設定ファイルを書くか解説していきます。
使用しているシェルはzsh
です。
また、今回解説するスクリプトは全て dotfiles/.zshrc at master · guri3/dotfiles にあります。
まず、2行プロンプトについてです。
PROMPT='$(emoji) %~ ${vcs_info_msg_0_}
%{%F{202}%}❯%{%f%}%{%F{221}%}❯%{%f%}%{%F{027}%}❯%{%f%} '
プロンプトの定義はこのようになっています。
実は、プロンプトの途中で改行すれば簡単に2行プロンプトにすることができます。
また、出力後の改行については、add_line
という関数を定義し、precmd
で呼び出すことで実現しています。
function add_line {
if [[ -z $PS1_NEWLINE_LOGIN ]]; then
PS1_NEWLINE_LOGIN=true
else
printf '\n'
fi
}
precmd() { add_line }
add_line
関数の中では、PS1_NEWLINE_LOGIN
環境変数に中身が存在しなければPS_NEW_LINE_LOGIN
環境変数にtrueを代入し、そうでなければ改行コードを出力しています。これをprecmd
で呼び出すことでプロンプトを表示する直前に毎回実行されるため、出力の後に改行をうまく挟むことができます。(ググればこの書き方がたくさん出てくるので、慣習みたいなものなのかも?)
次に、$
部分の変更についてです。
実際のコードではプロンプト2行目の部分です。
%{%F{202}%}❯%{%f%}%{%F{221}%}❯%{%f%}%{%F{027}%}❯%{%f%} '
ポイントは%F{}
と%f
で、%F{}
で色を指定し%f
で色をリセットします。
この時に指定する色は、dotfiles/colcheck.sh at master · guri3/dotfiles などを使って調べることができます。(このスクリプト拾い物のはずなのですが、出典がわかりませんでした...すみません)
また、全てを%{%}
で囲っているのは、こうしないとなぜかプロンプトがずれてしまう現象が起きるからです。スマートな解決方法を知っていたら教えてください。
最後に、絵文字部分についてです。
これも、関数を実装して呼び出しています。
function emoji {
if [[ $? != 0 ]]; then
echo -n '\U1F914'
elif [[ $(pwd) = $HOME ]]; then
echo -n '\U1F3E0'
elif [[ $(pwd) =~ "$HOME/projects" ]]; then
echo -n '\U1F4BB'
elif [[ $(pwd) =~ "$HOME/dotfiles" ]]; then
echo -n '\U1F527'
else
echo -n '\U1F4C2'
fi
}
プロンプトの1行目部分で呼び出しています。
PROMPT='$(emoji) %~ ${vcs_info_msg_0_}
僕はカレントディレクトリの状況に応じて
- home🏠
- projects💻(コード管理用ディレクトリ)
- dotfiles🔧
- それ以外📂
にそれぞれ絵文字を登録しているのと、
何か間違ったコマンドを入力した際に🤔が表示されるようになっています。
今回紹介するものは以上になります。
ぜひいつも使うターミナル環境を自分好みにカスタマイズしてみてはいかがでしょうか?