zsh-syntax-highlighting をカスタマイズする

@aintek on Sat Feb 16 2019
13.5 min

目次

はじめに

いきなりですが、zshを使っていますでしょうか。
zshはスクリプト言語としての十分な性能と、強力な補完機能を備えたshellです。
zshの設定ファイルである.zshrcをゴリゴリ設定しなくとも、その協力な機能を享受することは可能ですが、
生活のほとんどをターミナル(shell)と共にするエンジニアにとって、見た目をカスタマイズしたいというのは当然の要求かと思います。
そこで、本記事ではzshのコマンドラインを華やかにしてくれるsyntax-highlightingプラグインを利用し、自身の好みに合わせた見た目を実現する方法を示します。

著者の環境

toshiki@aoi-local% cat /etc/issue
Linux Mint 19 Tara \n \l
  • Linux Mint 19 Tara
  • ※Ubuntuベース

表記について

toshiki@aoi-local% は著者のプロンプトです。
実際にコマンドを入力する際は toshiki@aoi-local% を含まず、%以降のコマンドをコピーして入力して下さい。

zshのインストール

※すでにzshをインストール済みの方は’ログインシェルをzshに’に進んで下さいmm

まずは、zshをインストール済みかどうかを確認します。

toshiki@aoi-local% which zsh
/bin/zsh

which コマンドにてzshがインストールされていることを確認してみて下さい。
なお、上記のコマンドの結果はOSによって異なります。

もしまだインストールしていない方は、以下のコマンドを実行しzshをインストールしましょう。

toshiki@aoi-local% apt install zsh

aptコマンドでzshをインストールします。

ログインシェルをzshに

※すでにログインシェルをzshに設定済みの方は’zplugのインストール’に進んで下さいmm

zshの機能を堪能するために、ターミナル等の起動時に立ち上がるシェル(ログインシェル)をzshに変更しましょう。

以下のコマンドを実行し、ログインシェルをzshに変更して下さい。

toshiki@aoi-local% chsh -s /bin/zsh
Password: 

パスワードが求められますので、上記コマンドを実行したユーザのパスワードを入力します。
ターミナルを開き直すとzshが立ち上がるかと思います。

zshの初期化ファイルについて

本記事ではzshの設定を .zshrc にまとめます。

これはzshが起動時に読み込むファイルの1つが .zshrc であるためです。
なお、特に指定しない限りzshでは以下の順序で設定ファイルを読み込みます。

  1. /etc/zshenv
  2. ~/.zshenv
  3. ~/.zprofile
  4. ~/.zshrc
  5. /etc/zlogin
  6. ~/.zlogin

そのため、上記のいづれかのファイルに設定を施しても問題ありません。
ただし、ユーザ個別に設定を行いたい場合は、ユーザのホームディレクトリ以下( ~ )で行うべきでしょう。

zshのプラグイン管理

zshでは多様なプラグインが提供されており、ユーザはこれらのプラグインを組み合わせて利用することができます。
プラグインは世界中のエンジニアによって提供され、そのプラグインをダウンロードする場所も様々です。
様々な場所にあるプラグインを1つ1つ個別にダウンロードし、設定していくのはとても手間のかかる作業になります。
そこで、zshのプラグインを手軽に管理できるツールがzplugです。
以降ではzplugを利用して、zshのコマンドラインを華やかにしてくれるzsh-syntax-highlightingを導入してみましょう。

zplug のインストール

以下のコマンドを実行し、zplugをインストールします。

toshiki@aoi-local% curl -sL --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh | zsh

インストール方法は github.com/zplug/zplug を参考にしました。

zsh-sytax-highlightingのインストール

zshのコマンドラインを華やかにしてくれるプラグインであるzsh-sytax-highlightingをインストールします。
~/.zshrc をemacsやviなどのエディタで開き、以下の行を追加します。

# ### Load PLUGINS
source ~/.zplug/init.zsh

# syntax-highlighting
# (If the defer tag is given 2 or above, run after compinit command)
zplug "zsh-users/zsh-syntax-highlighting", defer:2

# Install plugins if there are plugins that have not been installed
if ! zplug check --verbose; then
    printf "Install? [y/N]: "
    if read -q; then
        echo; zplug install
    fi
fi

# Then, source plugins and add commands to $PATH
zplug load

なお、zsh-syntax-highlightingのインストール方法も github.com/zplug/zplug README.md に記載されており、こちらを参考にしました。

以下のコマンドを実行して ~/.zshrc を読み込むと、syntax-highlightingをインストールするかどうか聞かれるので「y」でインストールして下さい。

toshiki@aoi-local% source ~/.zshrc

2回目以降の起動では聞かれなくなります。

zsh-syntax-highlightingのカスタマイズ

zsh-syntax-highlightingはデフォルトでmainというhighlighterのみがアクティブになっています。
そのため、コマンドが暗い緑となってしまい背景色が暗い色の場合に少し見えづらい印象があります。

そこで、以下のように ~/.zshrc を変更し、コマンドライン全体の色を目立たせてみましょう。

# ### Load PLUGINS
source ~/.zplug/init.zsh

# syntax-highlighting
# (If the defer tag is given 2 or above, run after compinit command)

# ### 追記した箇所 ###
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main line brackets pattern cursor)
typeset -A ZSH_HIGHLIGHT_STYLES
ZSH_HIGHLIGHT_STYLES[line]='bold'
# ### ここまで ###

zplug "zsh-users/zsh-syntax-highlighting", defer:2

# Install plugins if there are plugins that have not been installed
if ! zplug check --verbose; then
    printf "Install? [y/N]: "
    if read -q; then
        echo; zplug install
    fi
fi

# Then, source plugins and add commands to $PATH
zplug load

その後、

toshiki@aoi-local% source .zshrc

とすると、コマンドライン全体がboldとなって表示されます。
また、ブラケットやカーソルの色も変化したかと思います。

追記した部分の解説

zsh-syntax-highlightingはデフォルトでmainというhighlighterのみが有効になっています。
そこで、main以外のhighlighterを有効にするために以下の設定を施しました。

ZSH_HIGHLIGHT_HIGHLIGHTERS=(main line brackets pattern cursor)

この設定例は zsh-syntax-highlighting/docs に記載されています。

次に、コマンドライン全体をboldにするために以下の設定を施しました。

ZSH_HIGHLIGHT_STYLES[line]='bold'

この設定例は zsh-syntax-highlighting/highlighters/line に記載されています。

これらの設定を施すことで、暗い背景色なターミナルでもコマンドがはっきりと見えるようになったのではないでしょうか。

最後に

いかがだったでしょうか。
エンジニアにとってターミナルは一番眺めることの多い画面ですので、はっきりと文字を識別できるようにカスタマイズするべき箇所だと思っています。
※文字が見えなくてオペミスしたなどないように・・・
なお、今回は zsh-syntax-highlighting のドキュメントを参考にboldを設定しただけですが、boldが効きすぎて煩わしく思える場合もあるかと思います。
その際は、lineではなく特定のコマンドやエイリアスのみをboldにするなどのカスタマイズを施してみて下さい。

私が普段から利用しているzshの設定を以下のリポジトリで公開していますので、どなたかの助けになれば幸いです。
aintek4/zsh_settings
※なお、私の環境ではいくつかのプログラミング言語をバージョン管理するためのツールを入れており、これを導入していない方の環境では警告が発生する場合がありますが、動作に影響の出るものではないので無視して下さい。
気になる方は、

 ### Programming Language settings

以降を削除して下さい。

参考

zsh.org
zshの本
zsh-syntax-highlighting

日別に記事を見る