zshの設定をoh-my-zshでいい感じにする

森裕介(プログラマー)
無念

zshをつかってみよう

先ほど Bash itについての説明 を書いたものの、 自分はシェルに zsh を使ってます。

補完が気持ちいいのとhistoryの参照時、編集がいい感じなのが嬉しいです。 (ひょっとするとbashでも同様の設定ができるとは思いますが…) 一度zshに触ってみて試してみてほしいです。

細かくは自分が書くよりも先人たちが詳しく熱く説明してくれていますのでそちらを参照してもらったほうがいいでしょう。 漢のzshzsh-lovers 和訳 がまずオススメです。

インストール

早速zshをインストールしてみましょう。

Macの場合は brew で、 Ubuntuの場合は apt-get でインストールできます。

brew install zsh
sudo apt-get install zsh

インストールが終わったら早速起動してみましょう。

zsh

なにやら環境設定用のファイルが存在しないためメッセージが表示されます。

You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~). This function can help you with a few settings that should
make your use of the shell easier.
You can:
(q) Quit and do nothing. The function will be run again next time.
(0) Exit, creating the file ~/.zshrc containing just a comment.
That will prevent this function being run again.
(1) Continue to the main menu.
(2) Populate your ~/.zshrc with the configuration recommended
by the system administrator and exit (you will need to edit
the file by hand, if so desired).
--- Type one of the keys in parentheses ---

2 を回答することでよしなに.zshrcを設定してくれます。

.zshrcを覗いてみましょう。

# Set up the prompt
autoload -Uz promptinit
promptinit
prompt adam1
setopt histignorealldups sharehistory
# Use emacs keybindings even if our EDITOR is set to vi
bindkey -e
# Keep 1000 lines of history within the shell and save it to ~/.zsh_history:
HISTSIZE=1000
SAVEHIST=1000
HISTFILE=~/.zsh_history
# Use modern completion system
autoload -Uz compinit
compinit
zstyle ':completion:*' auto-description 'specify: %d'
zstyle ':completion:*' completer _expand _comple
...

…なにやらよくわからない設定が記述されているようです。 この辺を自分好みに弄っていけばいいんですが、 初めてみるとどの記述がどういう設定を意味するのかちょっとむずかしそうです。

そこで oh-my-zsh をインストールしていい感じに設定してもらいましょう。

oh-my-zshをインストールする

oh-my-zsh

oh-my-zsh は zshの設定を追加、拡張しやすくするためのフレームワークです。 前回紹介したBash itもoh-my-zshの影響を受けて作成されています。

READMEをみながらインストールしてみましょう。 インストールをするとデフォルトシェルをzshに変更するか聞いてきますがとりあえず y を回答しておきましょう。

$ curl -L http://install.ohmyz.sh | sh
...
Cloning Oh My Zsh...
...
Checking connectivity... done.
...
Time to change your default shell to zsh!

インストール完了、ログインシェルがzshに変わりました。 envalias , setopt を確認するとよしなに設定されていることがわかります。

installed!

#環境変数を表示
$ env
TERM=xterm
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
LANG=en_US.UTF-8
MAIL=/var/mail/jiska
XDG_SESSION_ID=4
XDG_RUNTIME_DIR=/run/user/1000
HOME=/home/jiska
SHELL=/usr/bin/zsh
USER=jiska
LOGNAME=jiska
SHLVL=1
PWD=/home/jiska
OLDPWD=/home/jiska
ZSH=/home/jiska/.oh-my-zsh
...
#登録済みのaliasを表示
$ alias
='cd -'
..='cd ..'
...='cd ../..'
1='cd -'
2='cd -2'
3='cd -3'
4='cd -4'
5='cd -5'
6='cd -6'
7='cd -7'
8='cd -8'
9='cd -9'
_=sudo
afind='ack-grep -il'
cd..='cd ..'
...
#zshのオプションを表示
$ setopt
alwaystoend
autocd
autonamedirs
autopushd
cdablevars
completeinword
correctall
extendedhistory
noflowcontrol
histexpiredupsfirst
...

oh-my-zshの設定を変更する

インストール時に生成された .zshrc を編集することで oh-my-zshの設定を変更することが出来ます。

.zshrcにはコメントが記述されているのでそれを読みながら編集すればOKです。

例えばhistory時に日付時刻を表示させる変数 HIST_STAMPS が用意されています。 ここを編集してコメントアウトを解除、.zshrcを再読み込みしましょう。

#コメントアウト解除
HIST_STAMPS="mm/dd/yyyy"

これで history コマンドの表示が変更されます。

#HIST_STAMPS設定前
$ history | tail -5
25 ls -a
26 history </div></div>
</span>27 cd </div></div>
</span>28 vi .zshrc
29 history
#HIST_STAMPS設定後
$ history | tail -5
29 5/31/2014 13:03 history </div></div>
</span>30 5/31/2014 13:04 history | tail -5
31 5/31/2014 13:04 vi .zshrc
32 5/31/2014 13:04 source .zshrc
33 5/31/2014 13:04 history
</pre></div></figure> ### pluginを追加する 各アプリケーションの拡張に **plugin** を設定できます。 [plugin一覧](https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins) を見ながら設定したいpluginの名前を追加します。
#編集前
plugins=(git)
#編集後
plugins=(my-env atom autojump brew brew-cask bundler cdd colored-man composer docker encode64 gem git homeshick pow rails rake rbenv tig tmux vagrant web-search)
### themeを変更する Bash it同様、標準のテーマはなんだかシンプルすぎるというか…情報が足りない感じがします。 そこでthemeを変更して自分好みの設定を探しましょう。 [theme一覧](https://github.com/robbyrussell/oh-my-zsh/tree/master/themes) [スクリーンショット付きの解説](https://github.com/robbyrussell/oh-my-zsh/wiki/Themes) も参考にしつつ自分好みのthemeを探しましょう。 とりあえず *steeef* にしてみましょう。。
ZSH_THEME="steeef"
こうなりました。ユーザー名、ホスト名、カレントディレクトリの表示が表示されるようになりました。 Gitのブランチの状態も ● で表示されています。 ![steeef](./steeef.png) ## おわり zshを使ったことがない人はぜひ導入してzsh+oh-my-zshの使いごごちをためしてみてください。 すでにbashで慣れ親しんでいる人にとって デフォルトシェルを変更することはなかなかストレスが溜まることだと思います。 しかしoh-my-zshはいい感じに環境を設定してくれます、やはり一度ためしてみてください。