zsh設定ファイルを解読しよう

はじめに

本投稿は TECOTEC Advent Calendar 2023 の23日目の記事です。

こんにちは。次世代デジタル基盤開発事業部の安彦です。
私は新卒3年目で、Webシステムのフロント/サーバエンジニアとして業務に携わっています。

さて、皆さんは上手くシェルの設定できますでしょうか?
エンジニアなら少なからずシェル操作を行います。しかし、チーム内で画面共有などして様子を見てみると、

補完できず、typoが発生、使いにくそう!!

というわけで、詳しくないけどなんとかなっている私のシェル設定を解読してみます。

実行環境

実行環境は以下の通りです。

Ubuntu 22.04.3 LTS
zsh 5.8.1 (x86_64-ubuntu-linux-gnu)

シェル設定とは

Linuxのシェルには、 bashやzsh、fishなどの種類があります。
それらのシェルには操作しやすくするための機能やプラグインがあり、それを設定するのがzshrcなどの設定ファイルです。

解読

さっそく私の設定ファイルを解読していきます。

オプション設定

まず、zshで用意されているオプションを設定しています。 setopt {設定名}の形です。

# 補完系
setopt always_last_prompt # 補完でプロンプト位置を保持
setopt auto_list # 曖昧補完
setopt auto_menu # 補完キー(Tab)連打で補完を順に表示
setopt auto_cd # cdコマンドの保管
setopt auto_param_keys # カッコなどを補完
setopt correct_all # typoを検出
setopt extended_glob # globを使用
setopt list_types # 候補にファイルの種別を表示

これが基本的な補完設定だと思います。
後は、historyやプロンプトの細かな設定を入れています。

# cdとhistory系
setopt cdable_vars # cd引数がディレクトリでないときに、「~」を含めて補完する
setopt extended_history # historyにタイムスタンプも記録する
setopt hist_ignore_dups # historyの連続を削除
setopt hist_reduce_blanks # historyの余分な空白削除
setopt hist_ignore_space # コマンド先頭にスペースをいれたらhistoryに入れない

# その他
setopt auto_name_dirs # カレントディレクトリをプロンプト「%~」に表示
setopt auto_remove_slash # 不要な「/」を削除
setopt ignore_eof # ファイル末尾で勝手に閉じない
setopt no_beep # ビープ音を消す
setopt multios # マルチリダイレクト
setopt numeric_glob_sort # リストの数値は数値でソート
setopt prompt_subst # プロンプト内で変数を使う
setopt sh_word_split # 変数の分割ルールをスペース区切りにする
setopt noclobber # リダイレクトによる上書きを禁止

エイリアス

続いてlallなど基本的なエイリアスや、colorオプションを指定しています。
案件のリポジトリやホストOSのデスクトップなどよく使うパスを変数にいれています。
auto_cdオプションが効いているのでpjabc↵と入力するとだけでabc案件のリポジトリへ移動できます。

alias la='ls -a --color=auto'
alias lal='ls -al --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls -cvF --color=auto'
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias em='emacs'

## 各案件のディレクトリ
export pjabc="$HOME/repository/abc/sever"
## ホストOS側のデスクトップ
export desktop="/mnt/c/Users/abiko/Desktop"

シェル関数の読み込み

autoload {関数名}; {関数名}で関数読み込んで、すぐ実行しています。
compinitはzshに2種類ある補完システムのうち新しい方を、有効にする関数です。
colorsはプロンプトなどで色を使うための関数です。

autoload -U compinit; compinit # zshの新しい補完システムを有効にする
autoload -U colors; colors # 色指定できるようにする

補完スタイル

zstyle Pattern Style Valueの形で、補完のスタイルを決めるようです。
ここでmakeコマンドの補完も設定しています。

makeコマンドの補完

# 色つきの補完
zstyle ':completion:*' list-colors 'di=36' 'ex=31' 'ln=35'

# 補完候補をカーソルで選択できる
zstyle ':completion:*:default' menu select=1

# makeFileの補完
zstyle ':completion:*:*:make:*' tag-order 'targets'

# 区切り文字以外として扱う文字のリスト
export WORDCHARS='*?_.[];!#$%^{}<>'

プロンプト

左右のプロンプトと、typoしたときのサジェストのプロンプトを設定しています。
カスタマイズしてる箇所は右プロンプトにカレントディレクトリを表示してるくらいで、かなりシンプルな状態です。

# 右端の空白をなくす
ZLE_RPROMPT_INDENT=0
# PROMPT
PROMPT='%U%B`whoami`%u%b%F{green}>%f '
RPROMPT='%F{green}[%~]%f'
SPROMPT="correct '%R' to '%r' [nyae]? "

プロンプト

その他設定

npm completion >> ~/.bashrcでnpmコマンドの保管を追記しています。
Macのopenコマンドも便利なので、こちらの記事で紹介されているopen関数も追記しています。

zenn.dev

おわりに

シェル設定の紹介は以上になります。最後まで読んで頂きありがとうございます。
私自身も自分がどんな設定を入れているか把握しきれておらず、 各オプションも何となく有効にしていたので、改めて見直す機会になりました。

しかし補完といえばfishが優秀と聞くので、ちょっと試してみました。
何の設定もしていない状態で触ってみましたが、

設定なしのfishで良さそう!!

設定なしのfish

テコテックの採用活動について

テコテックでは新卒採用、中途採用共に積極的に募集をしています。
採用サイトにて会社の雰囲気や福利厚生、募集内容をご確認いただけます。
ご興味を持っていただけましたら是非ご覧ください。 tecotec.co.jp