追記
ここ10ヶ月ほど本家リポジトリのmasterブランチの更新が無く,先行きが不透明なのでforkを探してみました。
はじめに
研究室にzshのヘビーユーザーがいたので,それに触発されてzshの設定を作りなおしました。
私がzshを使い始めたころ(5年くらい前?)はoh-my-zshのような設定管理フレームワークが有名になる直前だったので,よく書かれているzshrcを探してコピーしてくるのが普通だったのですが,今ではoh-my-zshやPreztoのような設定管理フレームワークを使うことで,よく書かれた設定を手軽に利用することが出来ます。
oh-my-zshと比較してPreztoのほうが後発で動作も軽いということだったので今回はPreztoを利用してみました。
zpreztorc
.zpreztorc
はPreztoの設定ファイルで,読み込むプラグインの指定や,プラグイン固有の設定を行います。私は以下の点に気をつけて編集しました。
directory を無効化
初期設定では directory というモジュールが有効になっています。このプラグインでは AUTO_CD
(cd
を入力せずにディレクトリ移動ができる機能)やディレクトリスタック(カレントディレクトリをブックマークできる機能)に関する設定が行われるのですが,私はこれらの機能は使わないし,ディレクトリスタックを簡単に使えるようにするために 1
や 2
といったaliasが定義されてしまうのが嫌なので無効にしました。
MULTIOS
や EXTENDED_GLOB
はよく使うので,この2つはzshrcのほうで有効にしました。
archive を有効化
archive は lsarchive
と unarchive
というシェル関数を有効にするプラグインです。要するに extractコマンド です。
history-substring-search を有効化
history-substring-search は適当に文字列を入力してから↑キーやCtrl-Pを押すと,入力した文字列を部分文字列に持つ過去のコマンドを列挙してくれるプラグインで,zsh標準のhistory-beginning-searchの強化版といえます。
確かに便利なこともあるのですが,history-beginning-searchと比べて副作用が大きすぎると感じることが多くなってしまいました。今ではhistory-substring-searchは無効にして,history-beginning-searchでCtrl-PとCtrl-Nで前方一致検索を使えるようにする設定をzshrcに書いています。
# Ctrl-PとCtrl-Nで前方一致検索 autoload -Uz history-search-end zle -N history-beginning-search-backward-end history-search-end zle -N history-beginning-search-forward-end history-search-end bindkey "^p" history-beginning-search-backward-end bindkey "^n" history-beginning-search-forward-end
command-not-found を有効化
command-not-found はDebian系のディストリビューションやArch Linuxなどでaptやpacmanに含まれているけどもインストールされていないコマンドを実行しようとした時に,どのパッケージをインストールすればいいか教えてくれる機能です。
git を無効化
git はGit連携のためのプラグインで,右プロンプトの設定などが行われるので有効にしている人も多いのですが,定義されるaliasがキモイ ので無効にしました。右プロンプトにブランチ名などを表示するための設定は別のところでやっています(後述)。
osx を無効化
osx はMacのFinderやPreview.appとの連携のためのプラグインで,有効にしている人も多いのですが,ほとんど使うことが無さそうなので有効にしませんでした。
まとめ
# .zpreztorc # Color output (auto set to 'no' on dumb terminals). zstyle ':prezto:*:*' color 'yes' # Set the Prezto modules to load (browse modules). # The order matters. zstyle ':prezto:load' pmodule \ 'environment' \ 'terminal' \ 'editor' \ 'history' \ 'spectrum' \ 'utility' \ 'completion' \ 'prompt' \ 'archive' \ 'command-not-found' # Set the key mapping style to 'emacs' or 'vi'. zstyle ':prezto:module:editor' key-bindings 'emacs' # Set the prompt theme to load. zstyle ':prezto:module:prompt' theme 'sorin'
zshrc
これだけは欠かせないと思った設定は以前のzshrcから引き継ぎました。
correctを無効化
愛好家の方には申し訳ないのですが,便利だと思ったことがありません…
MAGIC_EQUAL_SUBSTを有効化
./configure --prefix=
の後でディレクトリ名の補完を有効にします。どうしてPreztoの初期設定で有効になっていないのかよく分かりません。副作用があるんでしょうか?
確かにMAGIC_EQUAL_SUBSTはPreztoの初期設定で有効になっていないのですが,なぜか同等の機能が使えるようになっています。
Ctrl+^で親ディレクトリにcdする
以前のzshrcからコピーしてきたのですが,移動後に左プロンプトのディレクトリ表示が更新されない不具合があったので,prompt_${prompt_theme}_precmd
の設定をしました。
https://github.com/arael/configs/blob/57650c837500ad916f7f7f18903070db354ec58b/zsh/zshrc.prezto#L140
右プロンプトにvcs_infoを表示する
以下の設定を読み込んでいます。
http://www.slideshare.net/mollifier/vcsinfo/33
まとめ
# .zshrc # Source Prezto. if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" fi ### modules/utility/init.zsh ### # https://github.com/sorin-ionescu/prezto/issues/622 unsetopt CORRECT ### modules/directory/init.zsh ### setopt MULTIOS # Write to multiple descriptors. setopt EXTENDED_GLOB # Use extended globbing syntax. # Ctrl-PとCtrl-Nで前方一致検索 autoload -Uz history-search-end zle -N history-beginning-search-backward-end history-search-end zle -N history-beginning-search-forward-end history-search-end bindkey "^p" history-beginning-search-backward-end bindkey "^n" history-beginning-search-forward-end # Ctrl-^ で cd .. # https://github.com/arael/configs/blob/57650c837500ad916f7f7f18903070db354ec58b/zsh/zshrc.prezto#L140 function cdup() { echo cd .. prompt_${prompt_theme}_precmd zle reset-prompt return 0 } zle -N cdup bindkey '^\^' cdup # Use `pbcopy` in modules/utility/init.zsh clip() { cat $1 | pbcopy } if [[ -s "${ZDOTDIR:-$HOME}/.zshrc.vcs_info" ]]; then source "${ZDOTDIR:-$HOME}/.zshrc.vcs_info" fi