sanoto_nittc’s diary

主にAdvent Calendarの記事を書きます

.zshrcに書いておくべきこと

はじめに

窓から Linux に転向し、zsh の存在を知ってからまだ1年程しか経っていませんが、

これから zsh を始める人と
zsh を使ってるくせに、未だに .zshrc を弄ってない人のために

.zshrc に書いておくべきことを紹介していこうと思います。


compinit(こんぷいんいっと)

ネット上に公開された .zshrc の殆どに書いてある、最初のおまじない。

autoload -Uz compinit && compinit

これは zsh の補完を有効化するためのもので、
これがないと zsh を使っているとは言えないくらいに重要なものです。

絶対に書きましょう。


オプションを設定する

オプション設定には setopt を使います。

setopt オプション名

調べるとわんさか出てきます。

また zstyle を使うとより詳細な設定ができますが、それがとてもわかりにくい。

いい感じの説明があったので引用しておきます。

これがまたすごくいい感じに意味不明なんですが、

zstyle ':completion:*:*:コマンド:*:タグ' スタイル

のような感じで定義していきます。
細かいことはとりあえずhttp://www.gentei.org/~yuuji/rec/pc/zsh/zshcompsys.txtを見ればちょっとだけ分かったような気になります。
ヘルプを読むためのヘルプが必要な時点で完全に理解するのはたぶん無理です!
書いて試してみれば割となんとかなるので、気にせず書いていきましょう。

(引用元:zshのzstyleでの補完時の挙動について - voidy21の日記


補完候補の表示・選択を便利にする

本当はもっと多くの設定があります。
ただ、これだけやっておけば(補完候補については)そんなに困ることはないと思います。

  • 補完候補を一覧表示にする
setopt auto_list
  • TAB で順に補完候補を切り替える
setopt auto_menu
  • 補完候補を一覧表示したとき、Tabや矢印で選択できるようにする
zstyle ':completion:*:default' menu select=1 
  • 補完候補の色づけ
export LS_COLORS='di=34:ln=35:so=32:pi=33:ex=31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}


ディレクトリ移動(cd)を便利にする

ターミナル(またはコマンドプロンプト)を普段から使っている人ならわかると思いますが、
ディレクトリ移動をする際、いちいち cd コマンドを打たなければならないのは非常に面倒です。

そこで、これを書いておきます。

setopt auto_cd

これで、パスを直打ちしてディレクトリ移動ができるようになります。

もちろん補完も効くので、とっても楽です。


ヒストリを活用する

bashzsh では、コマンドライン上で矢印キーの上下を操作することによって、
以前に実行したコマンドを遡って表示し、実行することがデフォルトでできるようになっています。

ただ、それで遡れるのはそのターミナルを起動したところまでです。
一回ターミナルを閉じるとリセットされてしまいます。

不便です。

なので、ヒストリファイルを作ってそこに実行したコマンドを保存するようにします。

export LANG=ja_JP.UTF-8
HISTFILE=$HOME/.zsh-history
HISTSIZE=1000000
SAVEHIST=1000000

ついでに、複数のターミナルを開いているときに
他のターミナルで実行したコマンドも使えるようにしておきます。

setopt share_history


見た目を自分好みにする(プロンプト設定)

これは人の好みによって内容が180度変わるので、各自で調べたほうがいいでしょう。
普通に .zshrc に書いてもいいですが、
これに関してはプラグインのテーマを使ったほうがいいかもしれません。
代表的なプラグインとしては、oh-my-zsh や prezto などがあります。


プラグインマネージャー

zsh には様々なプラグインがあります。

調べれば git にいっぱい転がっていますが、
それらを個々にインストール・管理するのは骨が折れます。

それを一括でやってくれるのがプラグインマネージャーです。

有名な zshプラグインマネージャーには antigen や zgen などがありますが、
おすすめは zplug です。

できるだけ .zshrc で完結させたいので、インストール等も全て .zshrc に書いていきます。

# zplugが無ければgitからclone
if [[ ! -d ~/.zplug ]];then
  git clone https://github.com/zplug/zplug ~/.zplug
fi

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

# ここに使いたいプラグインを書いておく
# zplug "ユーザー名/リポジトリ名", タグ

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

# インストールしてないプラグインはインストール
if ! zplug check --verbose; then
    printf "Install? [y/N]: "
    if read -q; then
        echo; zplug install
    fi
fi

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

これで zplug が使えるようになります。
zsh を起動するだけでインストール等が全て一括でできます)


プラグインの紹介

おすすめのプラグインを紹介していきます

# 補完を更に強化する
# pacman や yaourt のパッケージリストも補完するようになる
zplug "zsh-users/zsh-completions"

# git の補完を効かせる
# 補完&エイリアスが追加される
zplug "plugins/git",   from:oh-my-zsh
zplug "peterhurford/git-aliases.zsh"
# 入力途中に候補をうっすら表示
zplug "zsh-users/zsh-autosuggestions"

# コマンドを種類ごとに色付け
zplug "zsh-users/zsh-syntax-highlighting", defer:2

# ヒストリの補完を強化する
zplug "zsh-users/zsh-history-substring-search", defer:3
# 本体(連携前提のパーツ)
zplug "junegunn/fzf-bin", as:command, from:gh-r, rename-to:fzf
zplug "junegunn/fzf", as:command, use:bin/fzf-tmux

# fzf でよく使う関数の詰め合わせ
zplug "mollifier/anyframe"

# ディレクトリ移動を高速化(fzf であいまい検索)
zplug "b4b4r07/enhancd", use:init.sh

# git のローカルリポジトリを一括管理(fzf でリポジトリへジャンプ)
zplug "motemen/ghq", as:command, from:gh-r


まとめ

  • zsh はいいぞ
  • .zshrc をカスタマイズして、便利にしよう
  • プラグインマネージャー使うなら zplug を使おう


最後に

この記事を書いている途中で初めて dotfiles という文化を知りました。
CLI 界隈はまだまだ知らないことだらけだということを改めて痛感しました。
取り敢えず自分の .zshrc を公開し、今まで手を出していなかった vim や tmux にも手を出して、CLI 環境の改良により一層取り組んでいこうと思います。


github.com


あ、この記事は SPC同好会 Advent Calendar 2017 - Adventar 16日目の記事です。

adventar.org