macbook で使用する .zshrc の PS1(プロンプト)設定 (今更)


追記-2021/07/25

Git表示とプロント表示を変更
参考サイト:
zshプロンプトをカスタマイズ、色と改行とgit対応で見やすくする【Mac】2021.04.22

追記-2021-11-06

最近知ったのですが、macを使っている人はこちらを使っている方が多いようです。
私も現在は Starshipを使用しているのでおすすめです。
https://starship.rs/

本題

macbookAirを購入したばかりの頃にbashの入力欄をカスタマイズできることを知り、久しぶりに.zshrcで挑戦した時の備忘録。

当時意外と悩んだので簡単にまとめておきます。

今回参考にしたのはこの2つのサイト
https://zsh-prompt-generator.site/
https://qastack.jp/unix/53789/whats-the-newline-symbol-in-zshs-ps1

1つ目がzsh-prompt(プロンプトと呼ぶみたいです)を直感的に作成できるジェネレイトサイト
2つ目が意外とハマってしまった改行の仕方

どうしていまさら?

今まで .bash_profile PS1と検索しており、めぼしい情報がなく尚且ちょっと仕様が古いものばかりでまともにカスタマイズできなかった。
さらにmacの~/.zshrcに設定したexport PS1=''が動いてしまったのが勘違いに拍車をかけてしまった。
正確にはbashのものは動かなかったのだが手探りで試し動くオプションを見つけ使用していた。

使用方法

 vim ~/.zshrc 
~/.zshrc
# 一番頭付近に追加
PROMPT="%B%F{214}%n%f%b on %B%F{86}%m%f%b in %~"

2行表示させるには?

今回は改行し、下の行で入力をさせたい。
サイト2を参考にし$'\n'を追加。

使い方
PROMPT="%B%F{214}%n%f%b on %B%F{86}%m%f%b in %~"
# と
PROMPT="%B%F{49}➜ %f%b"
# を $'\n' を使いつなげたい
# 下に記述の ~/.zshrc のようにする。
~/.zshrc
# 一番頭付近に追加
PROMPT="%B%F{214}%n%f%b on %B%F{86}%m%f%b in %~"$'\n'"%B%F{49}➜ %f%b"

ターミナルを新規で起動もしくは読み込んで上げれば完成です。
お疲れさまでした。
bashからzshに変わりPS1がプロンプトへ呼び名が変わる。
改めてzsh プロンプトで検索すると色々ヒットしますね。楽しそう

追記 -- 2020/11/21

ラズパイのターミナル(.bashrc)を設定したので参考になればとメモを残しておく。
(.bashrc)のPS1設定で参考にしたサイト
https://qiita.com/hmmrjn/items/60d2a64c9e5bf7c0fe60
https://qiita.com/HMMNRST/items/d8fe7b3c528f447d68a6
https://scriptim.github.io/bash-prompt-generator/
ちなみに文字のカラー設定が.bashrcだと8色しかないように思えたが
参考サイト3のカラーパレットでかなりの色を選択できたため問題ないのかもしれない?

今回は下記の形で作成していく
(時間24H) username on hostname ~
→ $ 入力欄

.bashrc PS1設定の編集位置の把握

echo "$PS1" 
実行し表示された位置を.bashrcから探していくと60行目に確認できたのでここを編集していく
表示された文字列は少し違うが大丈夫だと思う
vim ~/.bashrc

参考サイト3を使用しPS1を作成していく。このサイト便利すぎる
~/.bashrcの自分の場合60行目をコメントアウトし、その下にサイト3で作成したものをコピー貼り付け
vimの場合 escを一度押し Shift押しながら:w で保存 Shift押しながら:q でvimから抜ける

~/.bashrc
PS1='\[\e[0m\](\[\e[0;2;38;5;122m\]\A\[\e[0m\])\[\e[m\] \[\e[0;1;38;5;216m\]\u\[\e[0m\] on \[\e[0;1;38;5;216m\]\h\[\e[0m\] in \[\e[0;38;5;74m\]\w\[\e[m\]\n\[\e[0;38;5;74m\]➜ \[\e[0;38;5;74m\]\$\[\e[m\] \[\e0'



source ~/.bashrcで読み込み設定が反映されていれば成功です。お疲れさまでした。
色はもしかしたら8色で表現されているかもしれないですね
コメントアウトしておくことで元に戻したいときに簡単に戻せるので初学者の方は前の設定は消さずにコメントアウトすることをおすすめします。

追記-2021/07/25

Git表示とプロント表示を変更
参考サイト:
zshプロンプトをカスタマイズ、色と改行とgit対応で見やすくする【Mac】2021.04.22

git の補完機能

ターミナルでの操作
echo 'ファイルの格納場所' && \
mkdir -p ~/.zsh/completion/ && \
echo 'ファイルをダウンロード' && \
curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh -o ~/.zsh/completion/git-completion.zsh && \
curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -o ~/.zsh/completion/git-prompt.sh && \
echo 'ファイルの権限を変更' && \
chmod a+x ~/.zsh/completion/git-prompt.sh && \
chmod a+x ~/.zsh/completion/git-completion.zsh && \
echo '移動しリネーム' && \
mv ~/.zsh/completion/git-completion.zsh ~/.zsh/completion/_git && \
echo '.zcompdump を一旦削除' && \
rm -f ~/.zcompdump

補完機能を自動的に起動するように .zshrc へ追記

.zshrc
fpath=(~/.zsh/completion $fpath)

autoload -Uz compinit
compinit -u

最後に設定を記述した.zshrcを再読み込み

zsh
source ~/.zshrc

下準備1-プロントのカスタマイズ

使える色からそれぞれに使用したい色を選ぶ
1 UserName
2 HostName

使える色
for c in {000..255}; do echo -n "\e[38;5;${c}m $c" ; [ $(($c%16)) -eq 15 ] && echo;done;echo

私は下記を選びました
1 UserName 214 オレンジ
2 HostName 086 蛍光色の水色

下準備2-プロントのフォント変更

特殊記号対応フォントのインストール
cd ~/ && \
git clone https://github.com/powerline/fonts && \
cd fonts && \
./install.sh && \
echo 'フォントのキャッシュクリア' && \
fc-cache -vf 

ターミナルの設定画面でフォントを「DejaVu Sans Mono Powerline」に変更

特殊記号表示の確認
echo "\ue0b0 \u00b1 \ue0a0 \u27a6 \u2718 \u26a1 \u2699"

プロントのカスタマイズ設定

~/.zshrcに下記を書き込んでください。
書き込みが出来たらsource ~/.zshrcで読み込めば完成です。

.zshrc
# Git保管機能の設定 ▼▼ここから▼▼ >>>>>
fpath=(~/.zsh/completion $fpath)
autoload -Uz compinit
compinit -u
# Git保管機能の設定 ▲▲ここまで▲▲ >>>>>

function left-prompt {
  name_t='214m%}'      # user name text clolr
  name_b='000m%}'    # user name background color
  path_t='255m%}'     # path text clolr
  path_b='031m%}'   # path background color
  arrow='087m%}'   # arrow color
  text_color='%{\e[38;5;'    # set text color
  back_color='%{\e[30;48;5;' # set background color
  reset='%{\e[0m%}'   # reset
  sharp="\uE0B0"      # triangle

  user="${back_color}${name_b}${text_color}${name_t}"
  dir="${back_color}${path_b}${text_color}${path_t}"
  echo "${user}%n%f%b on %B%F{086}%m%f%b ${back_color}${path_b}${text_color}${name_b}${sharp} ${dir}%~ ${reset}${text_color}${path_b}${sharp}${reset}\n${text_color}${arrow}➡ ${reset}"
}

PROMPT=`left-prompt`

# コマンドの実行ごとに改行
function precmd() {
  # Print a newline before the prompt, unless it's the
  # first prompt in the process.
  if [ -z "$NEW_LINE_BEFORE_PROMPT" ]; then
      NEW_LINE_BEFORE_PROMPT=1
  elif [ "$NEW_LINE_BEFORE_PROMPT" -eq 1 ]; then
      echo ""
  fi
}

# git ブランチ名を色付きで表示させるメソッド
function rprompt-git-current-branch {
  local branch_name st branch_status

  branch='\ue0a0'
  color='%{\e[38;5;' #  文字色を設定
  green='114m%}'
  red='001m%}'
  yellow='227m%}'
  blue='033m%}'
  reset='%{\e[0m%}'   # reset

  color='%{\e[38;5;' #  文字色を設定
  green='114m%}'

  # ブランチマーク
  if [ ! -e  ".git" ]; then
    # git 管理されていないディレクトリは何も返さない
    return
  fi
    branch_name=`git rev-parse --abbrev-ref HEAD 2> /dev/null`
    st=`git status 2> /dev/null`
  if [[ -n `echo "$st" | grep "^nothing to"` ]]; then
    # 全て commit されてクリーンな状態
    branch_status="${color}${green}${branch}"
  elif [[ -n `echo "$st" | grep "^Untracked files"` ]]; then
    # git 管理されていないファイルがある状態
    branch_status="${color}${red}${branch}?"
  elif [[ -n `echo "$st" | grep "^Changes not staged for commit"` ]]; then
    # git add されていないファイルがある状態
    branch_status="${color}${red}${branch}+"
  elif [[ -n `echo "$st" | grep "^Changes to be committed"` ]]; then
    # git commit されていないファイルがある状態
    branch_status="${color}${yellow}${branch}!"
  elif [[ -n `echo "$st" | grep "^rebase in progress"` ]]; then
    # コンフリクトが起こった状態
    echo "${color}${red}${branch}!(no branch)${reset}"
    return
  else
    # 上記以外の状態の場合
    branch_status="${color}${blue}${branch}"
  fi

  # ブランチ名を色付きで表示する
  echo "${branch_status}$branch_name${reset}"
}

# プロンプトが表示されるたびにプロンプト文字列を評価、置換する
setopt prompt_subst

# プロンプトの右側にメソッドの結果を表示させる
RPROMPT='`rprompt-git-current-branch`'