🛠️

Zsh 動かせるカスタマイズの森 

2021/09/26に公開

背景

現在、shellはzshを主に使用しています。
普段、ディレクトリ移動やdockerを起動する度にコマンド打つのめんどいなぁと感じるようになってきました。そこで、環境を改良するためにzshのカスタマイズを少しずつ進めた過程を紹介します。

これからzshをカスタマイズしたい人向けに書いていきます。
zshをカスタマイズしていくために、.zshrcファイルを編集する必要があります。
隠しファイルのため、普段はfinderに表示されません。
ターミナルを起動させて、

vim ~/.zshrc

と打ち込んで、編集していきます。
以下、貼っていくコマンドをコピペすること利用することができます

プラグイン

Zplug プラグインマネージャー

プラグインマネージャーとしてzplugを使用しています。(oh-my-zshでも可)
https://github.com/zplug/zplug
上のページの通りにzplugをインストール後、.zshrcに以下のコードを追加します。

# zplugを使う
source ~/.zplug/init.zsh

# ここに使いたいプラグインを書いておく
# zplug "ユーザー名/リポジトリ名", タグ
zplug "zsh-users/zsh-completions"
# 入力途中に候補をうっすら表示
zplug "zsh-users/zsh-autosuggestions"
# コマンドを種類ごとに色付け
zplug "zsh-users/zsh-syntax-highlighting"

# 自分自身をプラグインとして管理
zplug "zplug/zplug", hook-build:'zplug --self-manage'

# コマンドをリンクして、PATH に追加し、プラグインは読み込む
zplug load –verbose

source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

下記コマンドをターミナルで打ち込むと.zshrcの設定を反映させることができます。

source ~/.zshrc

zshの設定

私がzshを使用している時に、「長いコマンド打ち込むのは時間かかるなぁ」や「先週使用したコマンドってどんなやつだっけ」などあり、その度にググっていました。それを解消するために、以下のコードを設定しています。
個人的に便利ランキングNo.1はpecoです。
これのおかげで過去に打ち込んだコマンドを補完してくれるため、作業効率が上がります!!!!
https://github.com/peco/peco

# options
setopt auto_list

# setopt share_factory
setopt hist_ignore_all_dups

# peco with zsh setting
# コマンド履歴件数
HISTFILE=$HOME/.zsh-history
HISTSIZE=100000
SAVEHIST=1000000

# 過去に実行したコマンドを選択。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

# search a destination from cdr list
function peco-get-destination-from-cdr() {
  cdr -l | \
  sed -e 's/^[[:digit:]]*[[:blank:]]*//' | \
  peco --query "$LBUFFER"
}

### 過去に移動したことのあるディレクトリを選択。ctrl-uにバインド
function peco-cdr() {
  local destination="$(peco-get-destination-from-cdr)"
  if [ -n "$destination" ]; then
    BUFFER="cd $destination"
    zle accept-line
  else
    zle reset-prompt
  fi
}
zle -N peco-cdr
bindkey '^u' peco-cdr

########一般の設定##########
# 日本語ファイル名を表示可能にする
setopt print_eight_bit

# 直前と同じコマンドの場合はヒストリに追加しない
setopt hist_ignore_dups

# 補完機能を有効にする
autoload -Uz compinit
compinit -u
if [ -e /usr/local/share/zsh-completions ]; then
  fpath=(/usr/local/share/zsh-completions $fpath)
fi

# 補完で大文字にもマッチ
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

# mkdirとcdを同時実行
function mkcd() {
  if [[ -d $1 ]]; then
    echo "$1 already exists!"
    cd $1
  else
    mkdir -p $1 && cd $1
  fi
}

これからどんどん使用していくので、随時追加していきます。

Discussion