zshの模様替えをしました
はじめに
今年も早いもので、すでに三月。春の始まりです。
春といえば新しい生活。心機一転!
周りの環境が大きく変わる方も多いのではないでしょうか?
今年の春、私の人生に大した変化はないのですが、それでも人生にちょっと新しい風を吹かしたいな~と思うので、今回思い切って模様替えをしようと思います!
ターミナル環境のね。
zshellって?
シェル (shell) とは、OSとユーザーの仲介役。ターミナルを開いたときに動くプログラムがシェルです。
そのシェルにも色々あるんです。sh
, bash
, fish
, ksh
などなど…。今回は、その中のzsh
というシェルの話。
zshは高いカスタマイズ性が人気です。zsh
そのものの機能と豊富なプラグインでターミナル環境を自分の好きなように設定できます。
私もzshを使い始めて数年たちますが、欲しいところにちゃんと手が届く、という印象です!
…とか言いつつ私は面倒くさがりなので、自分で.zshrc
をイジることはしません。YouTubeやSNSなどで見つけたカッコいいターミナル環境をコピペして使うタイプです。
今回も便利なzsh
動画を見つけてきたのでこの記事で分解していきましょう。
インストール
お使いのOSのパッケージマネージャーでインストールしましょう。
私はDebianなので sudo apt install zsh
Mac OS なら brew install zsh
WindowsならWSL入れてから戻ってこい。
インストールできたら、zsh
をデフォにしましょう。chsh
コマンドで使うシェルを変更できます。
$ chsh <ユーザー名>
Changing shell for <ユーザー名>
Password: <パスワードを入力>
New shell: [/bin/bash]: /bin/zsh #ここでインストールしたzshの保存先を入力
Shell changed.
$ echo $SHELL
/bin/zsh
プラグイン
前述したように、zsh
にはプラグイン機能があります。zsh
の拡張性の高さはこのプラグインのおかげです。
このプラグインをインストールするためのプラグインマネージャーまで開発されてるので、設定は簡単です。
今回、私はzinit
というプラグインマネージャーを使います。
というわけで、プラグインをインストールするプラグインマネージャーをインストールしましょう。 zsh
の設定ファイルである$HOME/.zshrc
を編集します。
# ZINITのプラグイン保存先を設定
ZINIT_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/zinit/zinit.git"
# ZINITがないならインストール
if [ ! -d "$ZINIT_HOME" ]; then
mkdir -p "$(dirname "$ZINIT_HOME")"
git clone https://github.com/zdharma-continuum/zinit.git "$ZINIT_HOME"
fi
# ZINITを読み込む
source "$ZINIT_HOME/zinit.zsh"
上記を$HOME/.zshrc
に書き込んだら、新しいターミナルを起動しましょう。zinit zstatus
コマンドでインストールが成功したかどうか確認できます。
Zinit's main directory: /home/rolzy/.local/share/zinit
Zinit's binary directory: /home/rolzy/.local/share/zinit/zinit.git
Plugin directory: /home/rolzy/.local/share/zinit/plugins
Completions directory: /home/rolzy/.local/share/zinit/completions
Loaded plugins: 6
Light loaded: 1
Downloaded plugins: 5
Enabled completions: 159
Disabled completions: 0
Completions available overall: 160
Snippets loaded: OMZP::aws <single file>, OMZP::command-not-found <single file>, OMZP::sudo <single file>
Compiled plugins: 5
プロンプト
zinit
が設定できたらあとは楽勝です。まずはターミナル画面の見た目をいじってみましょう。
今回、Powerlevel10k
というプロンプトを使ってみます。
# Powerlevel10kをインストール
zinit ice depth=1 # git cloneのdepth指定
zinit light romkatv/powerlevel10k # lightでプラグインのみダウンロード
これを書き込んだあとターミナルを開くと、親切なインストールWizardが表示されます。フォントの設定とか時計とかメッチャ親切に設定してくれます。
私はこんな感じに落ち着きました:

コマンドの色分け
続いてインストールするのは zsh-syntax-highlighting
コマンドを色分けしてくれます。
# コマンド色分け
zinit light zsh-users/zsh-syntax-highlighting
ターミナルを再度読み込むと、コマンドの部位を色分けして読みやすくしてくれます。

Auto Complete
次はコマンドのオートコンプリート(コマンド補完機能)をインストールしてみましょう。
# オートコンプリートのインストール
zinit light zsh-users/zsh-completions
# fzf拡張機能
zinit light Aloxaf/fzf-tab
# オートコンプリート設定
## コンプリーションを読み込み
autoload -U compinit && compinit
## キャッシュされた過去の補完を読み込み
zinit cdreplay -q
## ファイル検索の大文字小文字を補完する
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
## 補完する際、ファイル一覧に色をつける
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
## デフォの補完画面ではなくfzfを利用する
zstyle ':completion:*' menu no
## cd時に行き先のフォルダの内容を表示
zstyle ':fzf-tab:complete:cd:*' fzf-preview 'ls --color $realpath'
# fzf拡張機能をON(fzfのインストールが必要)
eval "$(fzf --zsh)"
- オートコンプリートを可能にするのは
zsh-users/zsh-completions
というプラグインです - そこに
fzf
というプログラムの拡張機能を追加します。すると、補完時に検索ボックスが表示されるようになります - オートコンプリートの細かい設定も
zstyle
で指定してます。
設定を保存する前に、fzf
本体もインストールしてあげましょう。
git clone --depth 1
https://github.com/junegunn/fzf.git
~/.fzf && ~/.fzf/install
新しいターミナルを開くと、zsh
が色々補完してくれるようになります。
cd
するときにPathを途中まで書いてTab

Ctrl+r
で過去のコマンドを検索

コマンドの途中でTab
で候補を検索

Auto Suggest
続いて、以前使ったコマンドを自動で提案してくれるプラグインをご紹介。
# オートサジェスト
zinit light zsh-users/zsh-autosuggestions
# 提案を使う際のキーバインド(下記はCtrl+f)
bindkey '^F' autosuggest-accept
# コマンド履歴の設定
HISTFILE=~/.zsh_history
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S: "
HISTSIZE=50000 # 保存するコマンド数
SAVEHIST=50000 # 保存するコマンド数
HISTDUP=erase # 重複コマンドは保存しない
setopt appendhistory # 使ったコマンドはすぐファイルに追加
setopt sharehistory # 全セッションに履歴を共有
setopt hist_ignore_space # スペースで始まるコマンドは保存しない
setopt hist_ignore_all_dups # 重複コマンドは履歴から削除
これを書いてターミナルを再度読み込むと、コマンドを書く際に過去使ったコマンドを表示してくれます。

過去使ったコマンドがグレーで表示されます。Ctrl+f
と打つと、提案されたコマンドを使うことができます。
エイリアス
最後に、alias
でよく使うコマンドを省略しましょう。私のはこんな感じ:
alias ls='ls --color=auto'
alias c="clear"
alias pip="pip3"
alias python="python3"
alias vim="nvim"
alias gs='git status'
alias push='git push'
alias pull='git pull'
alias sa='source env/bin/activate'
おわりに
今回の.zshrc
への変更はこちらでも確認できます: