39
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

最強のシェル zsh

Last updated at Posted at 2015-04-06

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でもいいけど、その場合は、新たに追加した内容が反映されるだけで、削除した設定は反映されない。

まずプロンプト

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

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

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

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

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

$HOME/.zshrc
PROMPT="[%m]%# "
[hostname]% 

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

$HOME/.zshrc
PROMPT="[%m]%# "
RPROMPT="%*"
[hostname]%                                          19:32:23

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

とりあえず的な基本設定

$HOME/.zshrc
# 補完機能
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だろうが、それ系のがいろいろ作れる。

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

39
44
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?