2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

zshのプロンプトをいい感じにしたい

Last updated at Posted at 2023-11-20

記事の内容

プロンプトを初期状態のからいい感じにする。

初期状態から変更する

screenshot 2.png

初期状態では ユーザー名@ホスト名 現在いるディレクトリ % と表示されます。
おそらくホスト名は ユーザー名-no-MacBook-Air などとなっているのではないでしょうか。モノクロなのも相まってかなり見にくいです。

プロンプトの情報はシェル変数 PROMPT に保存されており、echo $PROMPT とコマンド入力するとその中身を教えてくれます。

shell
username@hostname ~ % echo $PROMPT 
%n@%m %1~ %# 

zsh 特有の Prompt Expansion が用いられていて分かりにくいですが、以下の変数を表示しています。

Prompt Expansion 意味
%n ユーザー名
%m ホスト名
%1~ 現在いるディレクトリ
%# 管理者権限の場合「#」、それ以外の場合「%」

次にプロンプトを変更する方法です。シェル変数 PROMPT の値を書き換えれば OK です。

shell
export $PROMPT="hoge@fuga > "
hoge@fuga > echo $PROMPT
# ↓ 出力結果
hoge@fuga > 
# プロンプト
hoge@fuga > 

ただしこれだけではターミナルを再起動すると元の状態に戻ります。

zsh の設定を~ディレクトリ配下にある ~/.zshrc という設定ファイルに書き込み、保存することで再起動しても設定が保たれます。

たとえば。.zshrc に以下の行を追加すれば、ターミナルアプリを開いたときに挨拶をしてくれます。

.zshrc
export $PROMPT="hoge@fuga > "
echo "hello!!"

# zshのPrompt Expansionを表示する場合 ``print -P`` を用いる
print -P "hell %n !!"

.zshrc を書き換えたら source ~/.zshrc とコマンド入力して .zshrc を読み込みむことでプロンプトの表示が更新されます。

shell
hoge@fuga > source ~/.zshrc
hello!!
hell username !!
oge@fuga >

Prompt Expansionを試してみる

色々な表示方法を試してみたい場合、毎回 .zshrc を編集して保存とすると面倒なので、プロンプト上で一時的に変更する方法を試してみます。

こちらの記事を参考にいろんな表示方法を試してみたいのでコマンドラインに入力していきます。
左から、%d: カレントディレクトリ、 %n ユーザー名、 %D: 日付(YY-MM-DD), %T: 時刻(hh:mm), %#: ルートユーザーの場合 #、それ以外の場合 % となります。

shell
hoge@fuga > export PROMPT="%%d: %d , %%n: %n, %%D: %D, %%T: %T %%#: %#"
%d: /Users/username , %n: username, %D: 23-11-20, %T: 22:19 %#: %

単に print -P "%%d: %d" のようにコマンド入力すれば以下のような出力結果になります。

%D: 23-11-20

色をつける

%F{色名}hoge%f というように %F%F で囲むことで色を付けることができます。
%K%k で囲むことで背景色を変更します。

screenshot 3.png

Gitリポジトリの状態を表示する

こちらの記事の6. プロンプトへ Git リポジトリの状態を表示する を参考に Git リポジトリの状態を表示する処理を追加していきます。

インストール

shell
brew install zsh-git-prompt

~/.zshrc を開いて以下のコードを貼り付けます。

.zshrc
+ source $(brew --prefix)/opt/zsh-git-prompt/zshrc.sh
+ export PROMPT='hoge@huga %~ $(git_super_status) > '

結果
screenshot 4.png
左が追加前、右が追加後です。

さいごに

さいごにたどり着いた zsh の設定を残してこの記事の結びとさせていただきます。

.zshrc
export LANG=ja_JP.UTF-8

# Gitリポジトリの状態を表示する https://github.com/olivierverdier/zsh-git-prompt
source $(brew --prefix)/opt/zsh-git-prompt/zshrc.sh

# Gitリポジトリ以外ではGitリポジトリの状態を表示しない
git_prompt() {
 if [ "$(git rev-parse --is-inside-work-tree 2> /dev/null)" = true ]; then
   export PROMPT="[%B%F{red}%n@%m%f%b:%F{green}%~%f]%F{cyan} $(git_super_status)%f"$'\n'"> " 
 else
   export PROMPT="[%B%F{red}%n@%m%f%b:%F{green}%~%f]%F{cyan}%f"$'\n'"> " 
 fi
}
precmd() {
 git_prompt
}

# 補完機能を有効にする
autoload -Uz compinit
compinit

# 自動補完を補助する https://github.com/zsh-users/zsh-autosuggestions
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

# エイリアス
alias la='ls -a'
alias ll='ls -l'
alias python="python3"

# 補完のリストの、選択している部分を塗りつぶす
zstyle ':completion:*' menu select

# 入力ミスに対応する。
setopt correct

# 直前のコマンドと同じなら、履歴に残さない
setopt hist_ignore_dups

# 高機能なワイルドカード展開を使用する
setopt extended_glob

# Ctrl+J でコマンドライン入力中に改行を入れる
bindkey '^J' self-insert
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?