M1 Macへの乗り換えでターミナルを改造した


どうもフロントエンドエンジニアの です。

M1 Macへの乗り換え時に、旧Macと同じような形でターミナル(iTerms2)を改造したので、その手順をメモします。

1 最終的なターミナル

最終的なターミナルは👇のような形になりました。ターミナルがカラフルになると可読性が上がる&テンションが上がります。さらにエイリヤスやpecoを設定すると、作業効率も爆上がりで、元のターミナルには戻れなくなります。

2 Preztoインストール & Powerlevel10kの設定

Zshのconfiguration frameworkであるPreztoをインストールし、Powerlevel10kというテーマを設定します。この段階でターミナルがかなりカラフルになり、テンション上がります。

※Prezto以外のconfiguration frameworkでも、Powerlevel10kの設定はできる模様です。Prezto以外を使いたい場合は、Powerlevel10kのREADMEをご覧ください。

2-1 Preztoインストール

  • Preztoをインストールします。
git clone --recursive [https://github.com/sorin-ionescu/prezto.git](https://github.com/sorin-ionescu/prezto.git) "${ZDOTDIR:-$HOME}/.zprezto"
  • Zshの設定ファイルを作成するために👇のようなコマンドを実行します。
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done

この時、作成しようとするZshの設定ファイルがすでに存在する場合は、👇のような形でエラーがでます。

ln: /Users/hogehoge/.zlogin: File exists
ln: /Users/hogehoge/.zlogout: File exists
ln: /Users/hogehoge/.zpreztorc: File exists
ln: /Users/hogehoge/.zprofile: File exists
ln: /Users/hogehoge/.zshenv: File exists
ln: /Users/hogehoge/.zshrc: File exists

この場合は、PreztoのREADMEに記載されているように、既に存在するファイルの下部にsource "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"

を追記するか、既存のファイルのコピーを作り削除するなどしてから、コマンドを再度実行し、後ほど統合すれば解決です。

Note:
If you already have any of the given configuration files, ln in the above operation will cause an error. In simple cases, you can load Prezto by adding the line source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" to the bottom of your ${ZDOTDIR:-$HOME}/.zshrc and keep the rest of your Zsh configuration intact. For more complicated setups, we recommend that you back up your original configs and replace them with the provided Prezto [runcoms](https://github.com/sorin-ionescu/prezto/blob/master/runcoms#readme).

私は、ファイルのコピーを作って、後ほど統合しました!

  • ターミナルを再度立ち上げると、👇のようになってプロンプトが変更されています。

2-2 Powerlevel10kの設定

  • Preztoのテーマの中からPowerlevel10kをインストールします。
prompt -s powerlevel10k
  • .zpreztorcを開いてテーマとしてPowerlevel10kを設定します。
vi ~/.zpreztorc

そして、👇のようにSet the prompt theme to load.部分のzstyle ':prezto:module:prompt' theme 'sorin'をコメントアウトして、zstyle ':prezto:module:prompt' theme 'powerlevel10k'とします。

# Set the prompt theme to load.
# Setting it to 'random' loads a random theme.
# Auto set to 'off' on dumb terminals.
# zstyle ':prezto:module:prompt' theme 'sorin'
zstyle ':prezto:module:prompt' theme 'powerlevel10k'
  • 表示の設定をします。
p10k configure

👆コマンドを実行すると、アイコン用の推奨フォントのインストールが求められるので、インストールします。また、ターミナルの再起動を求めらるので、一度再起動しておきます。再度ターミナルを立ち上げると、プロンプトの表示方法に関しての設定について色々と聞かれるのでそれに答えていくと、プロンプトが改造できます。

この段階で、私のターミナルは👇のようになりました(この時、後述3-1のカラーテーマを既に設定していたので、みなさんとカラーが少し違うはずです)。

表示するプロンプトをさらにカスタマイズしたい場合は、.p10k.zshを編集します。

vi .p10k.zsh

.p10k.zshファイル内の、# The list of segments shown on the left. Fill it with the most important segments.部分で、左のプロンプトの表示を、# The list of segments shown on the right. Fill it with less important segments.部分で、右プロンプトの設定をできます。

この段階で私のターミナルは👇のようになりました。OSアイコンを消して、CPU使用率がわかるようにしています。

設定方法の詳細は、Powerlevel10kのREADMEをご参照ください。

これで、Preztoインストール と Powerlevel10kの設定は終了です!

3 iTerm2の設定

続いて、iTerm2をカスタマイズします。

3-1 カラーテーマをIcebergにする

  • 青系が好きなので、カラーテーマをIceberg👇にします。

GitHub - cocopon/iceberg.vim: Bluish color scheme for Vim and Neovim

ファイルをダウンロードします。

curl -O https://raw.githubusercontent.com/Arc0re/Iceberg-iTerm2/master/iceberg.itermcolors
  • iTerm2で、Icebergを設定します。

iTerm2 > Preferences > Profiles > Colors > Color Presets..を選択します。

Importから、👆でダウンロードしたicebergを読み込むと選択できるようになります。これで完了です。

3-2 Hotkeyの設定

Hotkeyを設定するとショートカットキーで、ターミナルがすぐに開けるようになります。

  • Hotkeyを設定する

iTerm2 > Preferences > Keys > Hotkey > Create a Dedicated Hotkey Window...を選択します。

設定画面が開かれるのでDouble-tap keyにチェックを入れます。ここにチェックを入れることで、セレクトボックスで選択したキーを2回押すと、ターミナルが出現するようになります。👇の画面の例では、Controlを2回押すと、ターミナルが出現するようになります。

  • 次にiTerm2起動時の設定を行います。iTerm2 > Preferences > General > Startupで、「Only Restore Hotkey Window」を選択することで、iTerm2を起動したときに、ホットキーウィンドウのみを復元することができます。

  • 最後に、iTerm2 > Preferences > Profiles > Windowで、Windowの見た目の設定ができます。ProfileName=Hotkey Windowを選択し、透過度(Transparency)の設定や、Fullサイズのスクリーンを出現させるかなどを決めました。また、ここでHotkey Windowをデフォルトにするために、Set as Defaultとしました。

これで、Controlを2回押すと、ターミナルが出現すると思います。

4 エイリアスの設定

エイリアス(コマンドのショートカットみたいなもの)を設定します。

  • エイリアスの設定は、alias [設定したいエイリアス] = ‘[コマンド]’のような形で、設定したいエイリアスを.zshrcに記載し、.zshrcを再度読み込むことで設定できます。👇は私のエイリアスの一部抜粋です。
#alias
#git系
alias g='git'
alias ga='git add'
alias gd='git diff'
alias gs='git status'
alias gp='git push'
alias gb='git branch'
alias gst='git status'
alias gco='git checkout'
alias gcob='git checkout -b'
alias gf='git fetch'
alias gc='git commit'
alias gcm='git commit -m'
  • source ~/.zshrcで再度読み込むとエイリアスが使用できるようになっています。

5 pecoのインストール

interactive filtering toolであるpecoをインストールします。pecoを使うと、過去使用したコマンドの検索などが簡単に実行できます。

https://github.com/peco/peco

  • pecoをインストールします。
brew install peco
  • .zshrcに実行したいコマンドの設定を行います。今回は、過去に実行したコマンド検索と過去のディレクトリ移動の検索を設定します。👇を.zshrcに記載した後に、source ~/.zshrcを実行すると検索コマンドができます。
# peco settings
## 過去に実行したコマンドを選択。ctrl-rにバインド。
function peco-select-history() {
  BUFFER=$(\history -n -r 1 | peco --query "$LBUFFER")
  CURSOR=$#BUFFER
  zle clear-screen
}
zle -N peco-select-history
bindkey '^R' peco-select-history

## 過去に実行したディレクトリ移動を選択。ctrl-gにバインド。
if [[ -n $(echo ${^fpath}/chpwd_recent_dirs(N)) && -n $(echo ${^fpath}/cdr(N)) ]]; then
    autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
    add-zsh-hook chpwd chpwd_recent_dirs
    zstyle ':completion:*' recent-dirs-insert both
    zstyle ':chpwd:*' recent-dirs-default true
    zstyle ':chpwd:*' recent-dirs-max 1000
    zstyle ':chpwd:*' recent-dirs-file "$HOME/.cache/chpwd-recent-dirs"
fi

function peco-cdr () {
  local selected_dir="$(cdr -l | sed 's/^[0-9]\+ \+//' | peco --prompt="cdr >" --query "$LBUFFER")"
  if [ -n "$selected_dir" ]; then
    BUFFER="cd `echo $selected_dir | awk '{print$2}'`"
    CURSOR=$#BUFFER
    zle reset-prompt
  fi
}
zle -N peco-cdr
bindkey '^G' peco-cdr

6 最後に

ターミナルを改造したことで、開発効率がかなり上がった気がします。もっと良い拡張方法があれば、ぜひ教えてください!!

7 参考

初心者向け!zshの導入からpreztoとpowerlevel10kの設定 - Qiita

Mac のターミナルに Iceberg を設定して見やすくする - WhiteNote

iTerm2のHotkeyを使わないなんてもったいない!! - Qiita

MacのターミナルアプリはiTerm2で決まり!!オススメの設定と基本的な機能まとめ

zshにエイリアスとかいう奴入れたら人生の時間がn秒増えて神 - Qiita

pecoを使ったらターミナルの操作が劇的に効率化できた話 - Qiita

M1 mac の環境構築 その2 ターミナル編 - torikatsu.dev