lambda consulting

最強のシェル zsh

April 07, 2015

zsh

LinuxだろうとMacだろうと標準のシェルは bash かと。そこでシェル界最強と言われている zsh を標準のシェルにして、更に簡単な設定まで書く。

まずzshがあることの確認

% which zsh
/bin/zsh

なければ、homebrewなり、yumなりでインストール。
Macは標準でインストール済のようだが、最新がほしい場合は、homebrewでインストール。
もともとzshがインストールされておらず、新規にインストールした場合は、/etc/shellsにzshへのパスが追加されていることを確認。なければ追加。

zshを標準シェルにする

chsh -s '/bin/zsh'
Changing shell for yourname.
Password for yourname: ********

ターミナルを起動し直して、確認。

% echo $SHELL
/bin/zsh

簡単な設定

bashの場合、bash_profileやらbashrcやらがあるが、zshの場合もいろいろ。

file name conditions to be applied
$HOME/.zshenv すべて
$HOME/.zprofile ログインシェルとして起動
$HOME/.zshrc ログインシェルまたはインターラクティブシェルとして起動
$HOME/.zlogin ログインシェルとして起動

いろいろとあるようだが、個人的にはzshは対話的なシェルとして使うことを求めており、シェルスクリプトだったらbash使うので、とにかく設定は、.zshrcに書いておけばいいと思う。

ちなみに設定を書き換えたら

% exec zsh

source zshでもいいけど、その場合は、新たに追加した内容が反映されるだけで、削除した設定は反映されない。

まずプロンプト

ほぼ全部入りにするとこんな感じだが、長い。

PROMPT="[%n@%m](%*%) %~ $# "
[yourname@hostname](19:22:27) ~/.emacs.d %

なので、%#をベースにして、お好みでトッピングを追加するのがいいかと。

symbol meaning
%# 一般ユーザなら%、スーパーユーザなら#
%H ホスト名
%m ホスト名のうち最初のドットの前まで
%d カレントディレクトリのパス
%~ カレントディレクトリのパス(ホームの場合~)
%n ユーザ名
%D 年月日
%* 時分秒

自分の場合、vagrantを使った時にどのホストにいるかを知りたいけど、可能な限り短くしたいので

PROMPT="[%m]%# "
[hostname]%

くらいかで十分。ただ、時間があると後からうれしいときがあるので、それを右端に出しておけるというのが、zshのいいところ

PROMPT="[%m]%# "
RPROMPT="%*"
[hostname]%                                          19:32:23

もしパスをだしたいなら、どちらかというとRPROMPTに出したほうが邪魔にならなくていい気がする。僕はいらんけど。

とりあえず的な基本設定

# 補完機能
autoload -Uz compinit
compinit

# Emacs風キーバインド viがいいひとは -vで
bindkey -e

# cdとタイプしなくても、移動
setopt AUTO_CD

# cdの履歴を保持(同一のディレクトリは重複排除)
setopt AUTO_PUSHD
setopt PUSHD_IGNORE_DUPS

# コマンド履歴
HISTFILE=/.zsh_history
HISTSIZE=1000000
SAVEHIST=1000000

その他いくらでもあるけど、それらは内容を理解した上で、随時追加していけばいいでしょう。

超便利なエイリアス = グローバルエイリアス

bashのエイリアスは、コマンドのはじめ(一番左)を展開してくれるもの。でもzshは、コマンドの途中でも最後でもなんでもOK!

% ls -la | more

とか、しょっちゅうやるけど、” | more”の部分をaliasにできちゃう。

% alias -g M=’ | more’
% ls -la M

という感じで、その他、headだろうが、tailだろうが、それ系のがいろいろ作れる。

alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias -g M=' | more'
alias -g H=' | head'
alias -g T=' | tail'
alias -g N=' > /dev/null'
alias -g P=' --help | less'

使い方とかその他

とにかく補完機能がすごい。この設定だけでも、コマンドの引数をタイプする前に、Tabをバシバシ押して、どんな風になるか試すとおもしろい。

設定する項目とかかなり多いし、いちいちそんなの追ってらんねえという場合には、Oh-My-ZSH!という便利なものもあるらしい。なんか最初から見た目かっこいいんですけど。