「プロンプト」は、ターミナルで hoge-macbook:~ hoge$
と書かれた行のこと。
今回の記事では以下のことをなるべく簡潔にまとめていきたいと思います。
- プロンプトの表示内容を変える方法
- プロンプトの色や書体を変える方法
- コマンドの出力の後に改行を入れる方法
- プロンプトでGitブランチを表示する方法
- よく見るあの表示 ( ■■■▶︎ ) を再現する方法
ここわかんないよ!ここ間違ってるよ!などの意見があれば、ご遠慮なくコメントください。
先に一言
このツールを使うと全自動でカスタマイズできます!
開始方法 (Mac):
brew install powerlevel10k
echo "source $(brew --prefix)/share/powerlevel10k/powerlevel10k.zsh-theme" >>~/.zshrc
exec zsh
あとはターミナルの質問に対して答えていきながらカスタマイズしていきます:
何も起動しない場合や、再設定したい場合は以下のコマンドを実行します
p10k configure
もし、特殊な記号を使いたい場合は NerdFonts をインストールして、ターミナルのフォントに指定します。
デフォルトのプロンプト
私は見た目が気に入っているHyperというターミナルを使っていますが、中身は同じBashなので、Mac標準のターミナルでも、iTerm2でも変更方法は全く同じです。
試しにプロンプト変えてみる
ターミナルを開いて以下のコマンドを叩いてみる。
$ PS1='Hello Prompt! \# \t \w \$ '
これだけで、プロンプトの表示が変えられました〜!👏
ただ、ウィンドウを閉じてまた開くとプロンプトが元に戻ります。
うまく行かなかった場合
\
を %
に置き換えてみてください。
\# \t \w \$
%# %t %w %$
MacOS Catalina (2019/10) 以上の方など、Bashではなく、Zshをお使いの場合は、この書き方になります。
また、このあとで編集するファイルは .bashrc
ではなく .zshrc
となります。
使用中のシェルは、$ echo $SHELL
で確認できます。
( @tetsuyakojima さん、ありがとうございました!)
閉じても変更が残るようにする
プロンプトを変更するには、🏠ホームフォルダ (~) にある.bashrc
というファイルを編集します。
自分のユーザだけではなく、全ユーザの設定を変更したい場合は /etc/bashrc
を編集します。
上でも触れましたが、Zshをお使いの場合は、 .bashrc
ではなく .zshrc
を編集します。
Mac の Finder で隠しファイルの表示を切り替えるには ⌘command + shift + .(ドット)
を押します。
存在ない場合は、新規作成します。( $ touch ~/.bashrc
)
export PS1='Hello Prompt! \# \t \w \$ '
これで保存して、ターミナルを閉じて開き直すと、プロンプトが変更されたままになります。
( $ source ~/.bashrc
、もしくは、 $ source ~/.zshrc
を実行することで反映することもできます。)
表示する内容を変える
以下のように記述すると、上のスクリーンショットのような結果がでます。
export PS1='✌️ \# \t \w \$ '
記号 | 意味 | 例 |
---|---|---|
\h | ホスト名 | hamajunnoMacBook-Pro |
\u | ユーザ名 | hamajun |
\w | ディレクトリ(フルパス) | ~/Documents/GitHub |
\W | ディレクトリ | GitHub |
\t | 時間 (24形式) | 23:29:38 |
\T | 時間 (12形式) | 11:29:38 |
@ | AM / PM | PM |
\d | 日付 | Wed Jun 20 |
\D | 日時 | \D{%y/%m/%d %H:%M:%S} 18/06/20 23:29:38 |
\# | コマンドの番号 (1, 2, 3...) | 1 |
\n | 改行 | |
\$ | 一般ユーザーの時 $ 、rootの時 # を表示 |
$ |
【備考】デフォルトの表示を敢えて書くとこうなります: \h:\W \u\$
【備考】ちなみに、ホスト名はシステム環境設定
> 共有
で変更できます。
文字の色や書体を変える
「エスケープシーケンス」と呼ばれるものを使って、文字を太字にしたり、色をつけたりできます。
書体
export PS1='装飾なし \[\e[1m\] ここは太字 \[\e[0m\] 装飾なし \$ '
【解説】 \[
と \]
で囲んだところは「エスケープシーケンス」で、文字出力の制御を行う特殊な文字列。\e[
はASCIIのエスケープ文字を使うよという意味で、1m
は「太字」、0m
は「装飾をリセットする」という意味。
【備考】 \[
と \]
で囲まなくても一応、書体や色を変えることはできますが、↑↓キーを押したときや、画面サイズを変えたときに表示バグが発生しますので、ちゃんと\[
と \]
で囲みましょう。
値 | 効果 |
---|---|
0m | 装飾なし |
1m | 太字 |
2m | 細字 (未対応) |
3m | イタリック体 |
4m | 下線 |
【備考】 \e[0m
は \e[m
と省略できます。
文字の色
export PS1='装飾なし \[\e[32m\] ここは緑色 \[\e[0m\] 装飾なし \$ '
値 | 文字色 | 値 | 背景色 |
---|---|---|---|
30m | 黒 | 40m | ■ 背景黒 |
31m | 赤 | 41m | ■ 背景赤 |
32m | 緑 | 42m | ■ 背景緑 |
33m | 黄 | 43m | ■ 背景黄 |
34m | 青 | 44m | ■ 背景青 |
35m | 紫 | 45m | ■ 背景紫 |
36m | 水 | 46m | ■ 背景水 |
37m | 灰 | 47m | ■ 背景灰 |
【備考】 39m
で文字色を、49m
で背景色をデフォルトに戻せます。
【備考】 90m〜97m
でもう少し明るい文字色を指定できます。
【備考】 100m〜107m
でもう少し明るい背景色を指定できます。
【備考】 色のついた文字を太字にすると色が少し明るくなります。
詳しくはこちらを参照
書体、文字色、背景色の同時指定
export PS1='装飾なし \[\e[1;37;42m\] ここは太字、文字白、背景緑 \[\e[0m\] 装飾なし \$'
これらは ;
でつなげることができ、例えば、1;32m
と指定すると、「太字、文字色緑」となり、1;30;47m
と指定すると、「太字、文字色黒、背景白」となる。
アウトプットの後に改行を入れる
hamajun-mbp:~ hamajun$
の上に1行開いているのが確認できますでしょうか。こうすると出力が(かなり)長めのコマンドを叩くときに、アウトプット先頭が見つけやすくなると思います。
# 出力の後に改行を入れる
function add_line {
if [[ -z "${PS1_NEWLINE_LOGIN}" ]]; then
PS1_NEWLINE_LOGIN=true
else
printf '\n'
fi
}
PROMPT_COMMAND='add_line'
export PS1='\h:\W \u\$ '
【解説】 ここでは「シェルスクリプト」と呼ばれるものを使います。if文の条件文の-z
フラグで文字列の長さが0かどうかを確かめます。PROMPT_COMMAND
はプロンプトが表示される度に呼び出されるBashの特殊変数です。これで、1回目のときは改行せずに、2回目以降のときにプロンプトの前に改行を入れます。
Gitブランチを表示
カレントディレクトリがGitレポジトリの場合はブランチ名(master)を表示できます。
https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh
を.git-prompt.sh
というファイル名で🏠ホームフォルダ(~)に保存する。([Raw]→右クリック保存)
ファイル名の先頭にピリオドを付け忘れずに。
# show git branch
# https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh
source ~/.git-prompt.sh
export PS1='\h:\W \u \[\e[1;32m\] $(__git_ps1 "(%s)") \[\e[0m\] \$ '
【解説】 .git-prompt.sh
は、Git公式が用意したシェルスクリプトで、これを読み込みます。$()
はコマンドを呼び出すための記号。__git_ps1
は関数で、引数の"(%s)"
はフォーマット指定子です。(%s)
の場合、(master)
、<< %s >>
の場合、<< master >>
となります。
よく見るあの表示 ( ■■■▶︎ ) を再現する方法
# 先に、Menlo-forPowerlineをなどの記号文字を含むフォントをダウンロードして、ターミナルのフォントに指定する必要があります。
export PS1='\[\e[30;47m\] \t \[\e[37;46m\]\[\e[30m\] \W \[\e[36;49m\]\[\e[0m\] '
# (文字黒/背景灰色) 時刻 (文字灰色/背景水色)▶︎(文字黒) ディレクトリ (文字水色/背景色なし)▶︎(装飾なし)
よく目にするこのスタイリッシュな表示、Powerline-Shellという便利なプラグインを入れることでプロンプトがこのような見た目になります。でも、見た目の方は、実は「▶︎」の形をした特殊な記号文字だけで作らているんです。
Menlo for Powerline.ttf という特殊フォントをインストールして、ターミナルのフォントをこれに指定すれば、こういう表示を簡単に作れます。(Powerline Fonts, Nerd Fontsも使えます。)
Menloはターミナルの標準フォントで、Menlo for Powerlineはこれに特殊な記号文字を追加したフォントセットとなってます。
ターミナルのフォントは、「ターミナル」>「環境設定(⌘,)」>「プロファイル」タブ>「テキスト」タブ>「フォント」で変えられます。iTerm2の場合も同じく、「iTerm2」>「Preferences(⌘,)」>「Profiles」タブ>「Text」タブ>「Font」で変更できます。
「▶︎」の形をした記号文字はこちら →
※ 通常は四角形とか、四角形で囲った?として表示されます。
エディターのプロンプトにも反映される
私は、Atomのplatformio-ide-terminalというパッケージを使っていますが、こちらのプロンプトにも反映されていました。これは便利ですね!
VS Codeの標準ターミナルも同様に反映されます!
最後まで見ていただいてありがとうございました。
もし役に立ったのであれば「👍いいね」していただけると嬉しいです。
また、何か間違いがあった場合は、コメントの方をお願いします。
参考
https://www.mm2d.net/main/prog/c/console-02.html
https://stackoverflow.com/questions/14859148/how-to-set-a-conditional-newline-in-ps1
http://motw.mods.jp/shellscript/tutorial.html