【開発環境】初めてのzshの設定 〜補完強化で快適な開発環境を整える〜

開発環境
開発環境

2021年において、MacBook Pro (Retina, 13-inch, Late 2013)を使っている者です。ターミナルを開くたびに「zshに切り替えろよ!!」というMacさんの声を無視してきましたが、zshの補完機能が魅力に負けて、ついにzshに切り替えることにしました。
ここでは、快適な開発環境のための最初のzsh設定をご紹介させていただきます。

シェルを切り替える

シェルの切り替えはコマンド一つでできますので、場合によって切り替えれば良いです。今回はデフォルトシェルをzshに設定します。

# 使えるシェルの確認
$ cat /etc/shells
/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh        ★ ほとんどの場合はzshがあると思います 

# zshへ切り替え
$ chsh -s /bin/zsh
Changing shell for dipolecats.
Password for dipolecats:   ★Macユーザーのパスワードを入力

ターミナルを再起動してください。

#現在のシェルを確認する
% echo $SHELL
/bin/zsh

今までのbashの設定をzshに引き継ぐ

長年育てて生きたbashの設定をそのままzshに引き継ぎます。要はbash設定ファイルをzsh用に名前を変えてコピーするだけです。

$ cd ~    // homeディレクトリに移動
$ cat .bash_profile >> .zprofile
$ cat .bashrc >> .zshr

$ source .zshrc   //変更を有効にします。(ターミナル再起動でもOK)

これでbashでの設定と同じ設定をzshに引き継ぎました。
zshの補完機能を試してみましょう。「cd 」としてTABキーを打ちます

$ cd ★ここでTABキー    
app/             gradle/          gradlew*         gradlew.bat      settings.gradle
★ 下層のディレクトリ候補が表示されました(^^)

もちろんbashにも補完機能はありますが、上の場合だとTABキーを2回打つ必要がある。
補完のためのTABキーなんて、1日に何十回も何百回も打つことになるので、この違いは大きいですね。

プロンプトをカスタマイズする

「.zprofile」にプロンプトの設定を記述します。わたしはシンプルに「(カレントディレクトリ名):$ 」$の表示は緑色、としています。この場合はの設定は、

 PROMPT='(%c):%F{green}$%f '

となります。おもなパラメータ表記をまとめておきます。

%nユーザ名
%Mホスト名
%dカレントディレクトリ(フルパス)
%cカレントディレクトリ
%#ユーザー種別(#: ROOT, %: ROOT以外)
%D日付(YYYY-MM-DD)
プロンプト設定オプション

色指定は、パラメータを%F{色指定}...%fで囲んでやると良いです。
色の指定の仕方は256色の数値でも指定できます。

補完機能の強化:zsh-completions

zsh-completionインストール

zsh-completionsをインストールします。

$ brew install zsh-completions

brewでインストールすると、このようなメッセージが表示されるので、指示に従って設定していきましょう。

To activate these completions, add the following to your .zshrc:

  if type brew &>/dev/null; then
    FPATH=$(brew --prefix)/share/zsh-completions:$FPATH

    autoload -Uz compinit
    compinit
  fi

You may also need to force rebuild `zcompdump`:

  rm -f ~/.zcompdump; compinit

Additionally, if you receive "zsh compinit: insecure directories" warnings when attempting
to load these completions, you may need to run this:

  chmod -R go-w '/usr/local/share/zsh'
==> Summary
🍺  /usr/local/Cellar/zsh-completions/0.33.0_1: 147 files, 1.2MB

まず、.zshrcに下記を加えます。

  if type brew &>/dev/null; then
    FPATH=$(brew --prefix)/share/zsh-completions:$FPATH

    autoload -Uz compinit
    compinit
  fi

zcompdumpをリビルドします。

$ rm -f ~/.zcompdump; compinit

zsh: command not found: compinit と言われてしまったので、.zshrcの変更を有効にします。

(~):$ source .zshrc 
zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?

このようなメッセージが出た場合、ディレクトリの権限を変える必要がります。
brewの指示では「chmod -R go-w ‘/usr/local/share/zsh’」で‘/usr/local/share/zsh’の権限を自分以外書き込み禁止に変更するよう書かれてますが、私の場合すでに自分以外書き込み禁止だったので、これが原因ではないです。
どおやら、これらのディレクトリの権限を自分以外書き込み禁止にする必要があるそうです。ご自身の環境に合わせて下記を実行してください。

$ chmod go-w '/usr/local/share'
$ chmod go-w '/usr/local/share/zsh'
$ chmod go-w '/usr/local/share/zsh/site-functions'

便利補完ツールの設定

基本の設定

基本の設定です。下記を.zshrcに記載します。

  #cdなしでもディレクトリ移動
  setopt auto_cd

  #cd - で以前移動したディレクトリを表示
  setopt auto_pushd

  #コマンドをミススペルした時に候補を表示
  setopt correct

  #補完で小文字でも大文字にマッチさせる.ただし、大文字で検索文字列を入力した場合、大文字でのマッチを先に検索する.
  zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' '+m:{A-Z}={a-z}'

  # 補完候補を詰めて表示
  setopt list_packed
 
  # 補完候補一覧をカラー表示
  autoload colors
  zstyle ':completion:*' list-colors ''

  #コマンド履歴の保存先指定
  HISTFILE=~/.zsh_history

  #履歴ファイルに保存するコマンド履歴の件数
  export SAVEHIST=10000

  #historyに保存する時余分なスペースを削除する
  setopt hist_reduce_blanks

  #メモリに保存されるコマンド履歴の件数
  export HISTSIZE=1000

git branchをプロンプトに表示する

gitのbranchをプロンプトに表示するようにします。

$ mkdir ~/.zsh
$ cd ~/.zsh
$ curl -o git-prompt.sh https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh
$ mv git-prompt.sh .git-prompt.sh

プロンプトの設定の方法は.git-prompt.shに記載されています。
それに従い.zshrcを追記します。(前の章で設定したプロンプトの設定は無効にしてください)

 #git branchをプロンプトに表示する    
  setopt PROMPT_SUBST
  source ~/.zsh/.git-prompt.sh
  setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '

これで、git管理は以下のディレクトリに入ると、プロンプトにgitブランチ名が表示されます。
ただ、私はプロンプトに表示するパラメータや色をカスタマイズしたのので、下記のように設定しています。

setopt PROMPT_SUBST ; PS1='%c%F{cyan}$(__git_ps1 " (%s)")%f%F{green}\$%f '

すると、こんな感じのプロンプトになります。
TimeRecorder:カレントディレクトリ
develop   :git branch

zsh_prompt

コマンド履歴を補完

文字入力時に直近のコマンド履歴からサジェストが表示されます。
下の例では 「so」と入力すると、履歴から「source .zshrc」をサジェストしてくれます。
コマンドの決定は、[右矢印キー]、[Cntl-e]、[Cntl-f]で行えます。

設定は、まずzsh-autosuggestionsをクローン (ここでは~/.zsh/zsh-autosuggestionへ)します。

$ git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions

.zshrcに下記を追加します。

#コマンド履歴の補完
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=111'  #色指定

.zshrcを有効にします。これで設定完了です。

$ source .zshrc

サジェストコマンドの色はxterm 256 で指定できます。色パレットのサイトでお好きな色を選んでみてください。

コメント

タイトルとURLをコピーしました