インフラエンジニアbacchiのわかったことまとめ

bacchi.me

zshのインストール + わしの.zshrc

zshのインストール

以下のコマンドでインストールします。

  • RHEL系OS
# yum install zsh
  • Debian系OS
# apt-get install zsh
  • Mac
    最近のMacはすでにインストール済み!

zshを使う

zshをインストール後、現在のシェルでzshを実行すればzshを起動することができます。

しかし、毎度毎度zshと実行するのは面倒くさい事この上ないので、ログインシェルを変更してしまいましょう。

ログインシェルを変更する

毎回zshと入力するのは面倒なので、自動的にzshが起動するように変更しましょう。

ログインシェルをzshに変更するとbashの代わりにzshが最初に起動するようになます。

まずzshがログインシェルとして指定できるかどうかを確認します。以下のコマンドを実行してください。

# cat /etc/shells

Debian 8での実行結果は以下のとおり。

# cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/tmux
/usr/bin/screen
/bin/zsh
/usr/bin/zsh

お使いの環境の/etc/shellsに/bin/zshという行はありますか?

このファイルにはログインシェルに指定できるシェル一覧が入っています。

ここに/bin/zshが無いとzshがログインシェルに指定できないので確認してください(普通はあります)。

/bin/zshという行があることが確認できたら、以下のコマンドでログインシェルをzshに変更します。

# chsh -s /bin/zsh

シェルの指定を間違えると最悪ログインできなくなってしまうので、間違えないように気を付けてください。

コマンド実行後にパスワードを聞かれるのでパスワードを入力します。

これでログインシェルが変わりました。

ターミナルを開き直したり、ログインし直すとbashではなくzshが起動していると思います。

確認のためにpsコマンドを実行してみましょう。

[root@gealach] ~
# ps ax | grep zsh
11444 pts/0    Ss     0:00 -zsh
11572 pts/0    S      0:00 zsh
11681 pts/0    S+     0:00 grep zsh
zsh という行があるので zsh が起動していることが分かります。

わしの.zshrc

zshの設定はホームディレクトリの.zshrcというファイルに書きます。

ヒストリの設定や色の設定、入力補完など細かい設定を書くことができます。

ここでは私がMacとLinuxで使っている.zshrcを晒してみます。

########################################  
# 環境変数  
export LANG=ja_JP.UTF-8  

## pathを設定  
path=(~/bin(N-/) /usr/local/bin(N-/) ${path})  

# 色を使用出来るようにする  
autoload -Uz colors  
colors  

# emacs 風キーバインドにする  
bindkey -e  

# ヒストリの設定  
HISTFILE=~/.zsh_history  
HISTSIZE=1000000  
SAVEHIST=1000000  

# プロンプト  
# 1行表示  
# PROMPT="%~ %# "  
# 2行表示  
PROMPT="%{${fg[red]}%}[%n@%m]%{${reset_color}%} %~  
%# "  


# 単語の区切り文字を指定する  
autoload -Uz select-word-style  
select-word-style default  
# ここで指定した文字は単語区切りとみなされる  
# / も区切りと扱うので、^W でディレクトリ1つ分を削除できる  
zstyle \':zle:*\' word-chars " /=;@:{},|"  
zstyle \':zle:*\' word-style unspecified  

########################################  
# 補完  
# 補完機能を有効にする  
autoload -Uz compinit  
compinit  

# 補完で小文字でも大文字にマッチさせる  
zstyle \':completion:*\' matcher-list \'m:{a-z}={A-Z}\'  

# ../ の後は今いるディレクトリを補完しない  
zstyle \':completion:*\' ignore-parents parent pwd ..  

# sudo の後ろでコマンド名を補完する  
zstyle \':completion:*:sudo:*\' command-path /usr/local/sbin /usr/local/bin   
                   /usr/sbin /usr/bin /sbin /bin /usr/X11R6/bin  

# ps コマンドのプロセス名補完  
zstyle \':completion:*:processes\' command \'ps x -o pid,s,args\'  


########################################  
# vcs_info  

autoload -Uz vcs_info  
zstyle \':vcs_info:*\' formats \'(%s)-[%b]\'  
zstyle \':vcs_info:*\' actionformats \'(%s)-[%b|%a]\'  
precmd () {  
    psvar=()  
    LANG=en_US.UTF-8 vcs_info  
    [[ -n "$vcs_info_msg_0_" ]] &&&& psvar[1]="$vcs_info_msg_0_"  
}  
RPROMPT="%1(v|%F{green}%1v%f|)"  


########################################  
# オプション  
# 日本語ファイル名を表示可能にする  
setopt print_eight_bit  

# beep を無効にする  
setopt no_beep  

# フローコントロールを無効にする  
setopt no_flow_control  

# \'#\' 以降をコメントとして扱う  
setopt interactive_comments  

# ディレクトリ名だけでcdする  
setopt auto_cd  

# cd したら自動的にpushdする  
setopt auto_pushd  
# 重複したディレクトリを追加しない  
setopt pushd_ignore_dups  

# = の後はパス名として補完する  
setopt magic_equal_subst  

# 同時に起動したzshの間でヒストリを共有する  
setopt share_history  

# 同じコマンドをヒストリに残さない  
setopt hist_ignore_all_dups  

# ヒストリファイルに保存するとき、すでに重複したコマンドがあったら古い方を削除する  
setopt hist_save_nodups  

# スペースから始まるコマンド行はヒストリに残さない  
setopt hist_ignore_space  

# ヒストリに保存するときに余分なスペースを削除する  
setopt hist_reduce_blanks  

# 補完候補が複数あるときに自動的に一覧表示する  
setopt auto_menu  

# 高機能なワイルドカード展開を使用する  
#setopt extended_glob  

########################################  
# キーバインド  

# ^R で履歴検索をするときに * でワイルドカードを使用出来るようにする  
bindkey \'^R\' history-incremental-pattern-search-backward  

########################################  
# エイリアス  

alias ll=\'ls -atl\'  
alias rm=\'rm -i\'  
alias cp=\'cp -i\'  
alias mv=\'mv -i\'  
alias mkdir=\'mkdir -p\'  

# sudo の後のコマンドでエイリアスを有効にする  
alias sudo=\'sudo \'  

# グローバルエイリアス  
alias -g L=\'| less\'  
alias -g G=\'| grep\'  

# C で標準出力をクリップボードにコピーする  
# mollifier delta blog : http://mollifier.hatenablog.com/entry/20100317/p1  
if which pbcopy >/dev/null 2>&1 ; then  
    # Mac  
    alias -g C=\'| pbcopy\'  
elif which xsel >/dev/null 2>&1 ; then  
    # Linux  
    alias -g C=\'| xsel --input --clipboard\'  
elif which putclip >/dev/null 2>&1 ; then  
    # Cygwin  
    alias -g C=\'| putclip\'  
fi  



########################################  
# OS 別の設定  
case ${OSTYPE} in  
    darwin*)  
        #Mac用の設定  
        export CLICOLOR=1  
        alias ls=\'ls -G -F\'  
        alias mysql=\'/Applications/MAMP/Library/bin/mysql\'  
        alias mysqldump=\'/Applications/MAMP/Library/bin/mysqldump\'  
        export EDITOR=/Applications/MacVim.app/Contents/MacOS/Vim  
        alias vi=\'env LANG=ja_JP.UTF-8 /Applications/MacVim.app/Contents/MacOS/Vim "$@"\'  
        alias vim=\'env LANG=ja_JP.UTF-8 /Applications/MacVim.app/Contents/MacOS/Vim "$@"\'  
        ;;  
    linux*)  
        #Linux用の設定  
        ;;  
esac  

# vim:set ft=zsh:  
  • B!