MacBookを新調して初めて最初からMac OS Catalinaを使い始めることになりました。
Mac標準のプロンプト(ターミナル)が bash から zsh になってしまい、今まで動いていて便利機能が使えなくなってしまいました。
今までは .bash_profile、.bashrcだったけど、これからは .zprofile、.zshrcを使うようです。
基本的には以下のようにリネームするだけでaliasなどは動きましたが、gitの補完ツールなどの便利機能が動作しなくなってしまいました。
- .bash_profile -> .zprofile
- .bashrc -> .zshrc
特にプロンプトのカスタマイズでブランチ名や今いるフォルダが使えなくなって不便になっちゃいました。
このままだと作業効率が落ちるので、今いるディレクトリやgitのブランチ名と状態を表示するカスタマイズを導入します。
ちなみにgit本体はhomebrewでインストールし、バージョンは2.30.1です。
> which git /usr/local/bin/git > git --version git version 2.30.1
git の補完ツールをインストール
gitの補完・便利機能ツールにはおなじみのgit-completion・git-promptを使います。
以前はbash版を使っていましたが、今回はzsh版を使います。
まず、ファイルの格納場所を作ります。
mkdir -p ~/.zsh/completion/
githubで公開されている「git-completion.zsh」「git-prompt.sh」ファイルをダウンロードします。
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
次にダウンロードしたファイルの権限を変更します。
chmod a+x ~/.zsh/completion/git-prompt.sh chmod a+x ~/.zsh/completion/git-completion.zsh
ダウンロードした「git-completion.zsh」をリネームします。
mv ~/.zsh/completion/git-completion.zsh ~/.zsh/completion/_git
.zcompdump を一旦削除します。
rm -f ~/.zcompdump
補完機能を自動的に起動するように .zshrc へ追記する。
fpath=(~/.zsh/completion $fpath) autoload -Uz compinit compinit -u
これで「source ~/.zshrc」または「source ~/.zprofile」で、読み込めば git の補完機能は使えるようになるはずです。
zshのプロンプト(ターミナル)をカスタマイズ
git の補完機能などをインストールしたら、プロンプト(ターミナル)にブランチ名などを追加するカスタマイズをします。
カスタマイズは、こちらのサイトを参考に試してみました。
この対応で、プロンプトに以下のカスタマイズが追加されます。
- 左側にユーザー名・マシン名・今いるパス
- 右側にブランチのステータスとブランチ名
- 自動改行
以下のコードを .zshrcへ追記、gitの補完機能の読み込みもあわせて追記します。
fpath=(~/.zsh/completion $fpath) autoload -Uz compinit compinit -u export CLICOLOR=1 function left-prompt { name_t='179m%}' # 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%#@%m${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`'
「.zshrc」に追記したらsourceコマンド「source ~/.zshrc」または「source ~/.zprofile」で読み込みます。
sourceコマンドを実行すると、ユーザー名、パス、ブランチ名などが表示されると思います。
ただ、ターミナルがデフォルトのままだと記号が文字化けしちゃうのでフォントを変更する必要があります。
色をカスタマイズしたい場合は変数の色コードを変更します。
使える色コードはこのコマンドをコピペして確認できます。
for c in {000..255}; do echo -n "\e[38;5;${c}m $c" ; [ $(($c%16)) -eq 15 ] && echo;done;echo
プロンプトのフォントを変更
三角形やgitブランチ ステータスのアイコンは特殊記号なので、対応しているフォント「DejaVu Sans Mono Powerline」に変更する必要があります。
デフォルトではインストールされていないので、ダウンロードしてインストールします。
powerline fontのインストール
cd ~/ git clone https://github.com/powerline/fonts cd fonts ./install.sh
念の為フォントのキャッシュをクリアします。
fc-cache -vf
ターミナルの設定画面でフォントを「DejaVu Sans Mono Powerline」に変更します。
まずターミナルの設定画面を開いて対象プロファイルの「フォント」の「変更」ボタンをクリックします。
フォントの一覧から「DejaVu Sans Mono Powerline」を選択します。
プロンプトのカスタマイズを実行済みなら、文字化けしていた記号が表示されていると思います。
念の為確認するなら、このコマンドで確認できます。
echo "\ue0b0 \u00b1 \ue0a0 \u27a6 \u2718 \u26a1 \u2699"
プロンプトを見やすくするのはおすすめ!
プロンプトで今作業している場所やブランチ名やステータスを常に表示していれば、ミスする確率も減って安心できます。
かんたんなコマンドで確認もできますが、いちいち打ち込むのも面倒ですし、こういったテクニックは時短にもなるし良いものです。
コメント
素晴らしい記事!
ありがとうございます!