.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
これで、パスを直打ちしてディレクトリ移動ができるようになります。
もちろん補完も効くので、とっても楽です。
ヒストリを活用する
bash や zsh では、コマンドライン上で矢印キーの上下を操作することによって、
以前に実行したコマンドを遡って表示し、実行することがデフォルトでできるようになっています。
ただ、それで遡れるのはそのターミナルを起動したところまでです。
一回ターミナルを閉じるとリセットされてしまいます。
不便です。
なので、ヒストリファイルを作ってそこに実行したコマンドを保存するようにします。
export LANG=ja_JP.UTF-8 HISTFILE=$HOME/.zsh-history HISTSIZE=1000000 SAVEHIST=1000000
ついでに、複数のターミナルを開いているときに
他のターミナルで実行したコマンドも使えるようにしておきます。
setopt share_history
見た目を自分好みにする(プロンプト設定)
これは人の好みによって内容が180度変わるので、各自で調べたほうがいいでしょう。
普通に .zshrc に書いてもいいですが、
これに関してはプラグインのテーマを使ったほうがいいかもしれません。
代表的なプラグインとしては、oh-my-zsh や prezto などがあります。
プラグインマネージャー
調べれば 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
- インタラクティブなフィルタ:fzf を使う
※ fzf:GitHub - junegunn/fzf: A command-line fuzzy finder
# 本体(連携前提のパーツ) 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
まとめ
最後に
この記事を書いている途中で初めて dotfiles という文化を知りました。
CLI 界隈はまだまだ知らないことだらけだということを改めて痛感しました。
取り敢えず自分の .zshrc を公開し、今まで手を出していなかった vim や tmux にも手を出して、CLI 環境の改良により一層取り組んでいこうと思います。
あ、この記事は SPC同好会 Advent Calendar 2017 - Adventar 16日目の記事です。