zsh

提供: FreeBSD入門
2015年5月5日 (火) 11:13時点におけるDaemon (トーク | 投稿記録)による版

移動: 案内検索
スポンサーリンク

zsh (z shell, zシェル)とは、究極のシェルという意味を込めて Z を冠したシェルです。少しだけ、究極のシェルzshに入門してみましょう。

読み方

zsh
ぜっとしぇる, ぜっとしぇ

概要

zshは、強力な補完機能を提供するシェルです。

インストール

pkgコマンドでインストールする場合

sudo pkg install zsh

デフォルトシェルの変更

$ chsh -s /usr/local/bin/zsh

.loginでzshを起動するスクリプト

ログインシェルを変更できない、もしくは、したくないけど、ログインしたときにzsh を起動したい場合には、.loginに以下のスクリプトを追加して、zshを起動することができます。FreeBSDな環境では、考慮不要かと思いますが、以下のスクリプトでは、 /bin/zsh がある場合にも対応しています。

if ( -x /bin/zsh ) then
        exec /bin/zsh
else if ( -x /usr/local/bin/zsh ) then
        exec /usr/local/bin/zsh
fi

プラグイン

antigenは、zshプラグインマネージャーです。

$ git clone git://github.com/zsh-users/antigen.git ~/.zsh/git/antigen/

設定

設定ファイル

~/.zshrc
autoload  -U compinit
compinit
autoload  -U colors
zstyle ':completion:*' list-colors 'di=36' 'ln=35' 'ex=32'
 
export LSCOLORS=ExGxdxdxCxDxDxBxBxegeg
 
setopt auto_list
setopt automenu braceccl ignoreeof correct
setopt listtypes pushdsilent
setopt nonomatch
 
setopt equals               # =command を command のパス名に展開する
 
setopt autocd auto_pushd pushd_ignore_dups
setopt list_packed
 
setopt hist_ignore_all_dups # 重複したヒストリは追加しない
setopt hist_ignore_dups  # 直前と同じコマンドラインはヒストリに追加しない
setopt hist_no_store # history (fc -l) コマンドをヒストリリストから取り除く。
setopt hist_reduce_blanks   # 余分なスペースを削除してヒストリに記録する
#setopt hist_verify          # ヒストリを呼び出してから実行する間に一旦編集できる状態になる
setopt list_types           # 補完候補一覧でファイルの種別をマーク表示
setopt long_list_jobs       # 内部コマンド jobs の出力をデフォルトで jobs -l にする
setopt magic_equal_subst    # --prefix=/usr などの = 以降も補完
 
setopt mark_dirs            # ファイル名の展開でディレクトリにマッチした場合末尾に / を付加する
#setopt menu_complete        # 補完候補が複数ある時、一覧表示 (auto_list) せず、すぐに最初の候補を補完する
setopt multios              # 複数のリダイレクトやパイプなど、必要に応じて tee や cat の機能が使われる
setopt no_list_beep         # 補完の時にベルを鳴らさない
setopt numeric_glob_sort    # ファイル名の展開で、辞書順ではなく数値的にソートされるようになる
setopt print_exit_value     # 戻り値が 0 以外の場合終了コードを表示する
setopt short_loops          # for, repeat, select, if, function などで簡略文法が使えるようになる
setopt print_eight_bit      # 8 ビット目を通すようになり、日本語のファイル名などを見れるようになる
setopt prompt_subst         # 色を使う
setopt pushd_ignore_dups    # 同じディレクトリを pushd しない
setopt notify               # ジョブの状態をただちに知らせる
 
setopt share_history
 
autoload -U predict-on
 
 
zstyle ':completion:*' menu select=0
 
# cdr, cdの履歴
typeset -ga chpwd_functions
autoload -U chpwd_recent_dirs cdr
chpwd_functions+=chpwd_recent_dirs
zstyle ":chpwd:*" recent-dirs-max 500
zstyle ":chpwd:*" recent-dirs-default true
zstyle ":completion:*" recent-dirs-insert always
 
alias -s txt=cat
alias -s py=python
alias -s php=php
alias -s rb=ruby
 
if [ -f ~/.zsh/git/antigen/antigen.zsh ]; then
        source ~/.zsh/git/antigen/antigen.zsh
        antigen-bundle zsh-users/zsh-syntax-highlighting
        antigen-bundle history
        antigen-bundle trapd00r/zsh-syntax-highlighting-filetypes
        antigen-apply
fi

使い方

% zsh --version
zsh 5.0.5 (amd64-portbld-freebsd10.0)

zsh入門

タブ2回でインタラクティブに補完候補を選択

タブを2回押すと、補完候補一覧をタブ、もしくは、カーソルー(やEmacsキーバインド)で選択できます。

$ ls /etc/ssh/
moduli                  ssh_host_key
ssh_config              ssh_host_key.pub
ssh_host_dsa_key        ssh_host_rsa_key
ssh_host_dsa_key.pub    ssh_host_rsa_key.pub
ssh_host_ecdsa_key      sshd_config
ssh_host_ecdsa_key.pub

cdの履歴

auto_pushdの履歴

cd -と入力してタブをうつと、移動してきたディレクトリの履歴が選択できます。 ディレクトリは、古い順にならびます。

$ cd -<tab>
$ cd -
0 -- /home/kaworu/
1 -- /etc
2 -- /usr/src

cd + だと、- とは逆順(新しい順)に並びます。

$ cd +
0 -- /usr/src
1 -- /etc
2 -- /home/kaworu/

/usr/src に移動するなら、2 を押してエンターか、さらにタブを押して、選択肢から選択することもできます。

$ cd -2

コマンド履歴をインクリメンタルサーチする

コマンドの履歴を C-r でインクリメンタルサーチできます。

$ whereis unzip
bck-i-search: n_

コマンドライン入力

コマンドラインをスタックに一時的に待避

ESC-q でコマンドラインを一時的にスタックに待避し、別のコマンドを実行したあとに、スタックに待避したコマンドラインを自動で再入力できます。

ESC-q

コマンド入力中に、ほかのコマンドを実行して何かを確認したいときなどに使えます。

zcompile スクリプトをコンパイルする

zshシェルスクリプトをコンパイルすることができます。

$ zcompile hello.zsh

hello.zsh.zwc というファイルが作成されます。

$ file hello.zsh.zwc
hello.zsh.zwc: data

.zshrcなどもコンパイル可能ですが、.zshrcを変更したら zcompile で .zshrc.zwc を作り直す必要があります。

関連項目

コマンド

シェル




スポンサーリンク