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 ..' <---- setopt AUTO_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!という便利なものもあるらしい。なんか最初から見た目かっこいいんですけど。