【コラム】

漢のzsh

22 もってけ泥棒! コピペで始めるzsh - リターンズ

 

22/24

こいつを~/.zshrcにコピーだ

今回は、そのまま使えるコピペシリーズ第2弾をお送りする。本連載の第10回目でそのまま~/.zshrcにコピーすれば使える設定ファイルを紹介したが、これが好評だった。とりあえず、読者の皆さんはコピペしてzshの世界を堪能したらしい。あれからいくらかの変更や設定追加を行ったので、その最新版を公開しよう。というわけで、持ってけ!! 野郎どもっ!!!

リスト1.1 コピー&ペースト対応 ~/.zshrc ファイル - LInux/FreeBSD/Mac OS X 対応版


# users generic .zshrc file for zsh(1)

## Environment variable configuration
#
# LANG
#
export LANG=ja_JP.UTF-8


## Default shell configuration
#
# set prompt
#
autoload colors
colors
case ${UID} in
0)
    PROMPT="%B%{${fg[red]}%}%/#%{${reset_color}%}%b "
    PROMPT2="%B%{${fg[red]}%}%_#%{${reset_color}%}%b "
    SPROMPT="%B%{${fg[red]}%}%r is correct? [n,y,a,e]:%{${reset_color}%}%b "
    [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && 
        PROMPT="%{${fg[cyan]}%}$(echo ${HOST%%.*} | tr '[a-z]' '[A-Z]') ${PROMPT}"
    ;;
*)
    PROMPT="%{${fg[red]}%}%/%%%{${reset_color}%} "
    PROMPT2="%{${fg[red]}%}%_%%%{${reset_color}%} "
    SPROMPT="%{${fg[red]}%}%r is correct? [n,y,a,e]:%{${reset_color}%} "
    [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && 
        PROMPT="%{${fg[cyan]}%}$(echo ${HOST%%.*} | tr '[a-z]' '[A-Z]') ${PROMPT}"
    ;;
esac

# auto change directory
#
setopt auto_cd

# auto directory pushd that you can get dirs list by cd -[tab]
#
setopt auto_pushd

# command correct edition before each completion attempt
#
setopt correct

# compacked complete list display
#
setopt list_packed

# no remove postfix slash of command line
#
setopt noautoremoveslash

# no beep sound when complete list displayed
#
setopt nolistbeep


## Keybind configuration
#
# emacs like keybind (e.x. Ctrl-a goes to head of a line and Ctrl-e goes 
#   to end of it)
#
bindkey -e

# historical backward/forward search with linehead string binded to ^P/^N
#
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^p" history-beginning-search-backward-end
bindkey "^n" history-beginning-search-forward-end
bindkey "\\ep" history-beginning-search-backward-end
bindkey "\\en" history-beginning-search-forward-end


## Command history configuration
#
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt hist_ignore_dups     # ignore duplication command history list
setopt share_history        # share command history data


## Completion configuration
#
fpath=(~/.zsh/functions/Completion ${fpath})
autoload -U compinit
compinit


## zsh editor
#
autoload zed


## Prediction configuration
#
#autoload predict-on
#predict-off


## Alias configuration
#
# expand aliases before completing
#
setopt complete_aliases     # aliased ls needs if file/dir completions work

alias where="command -v"
alias j="jobs -l"

case "${OSTYPE}" in
freebsd*|darwin*)
    alias ls="ls -G -w"
    ;;
linux*)
    alias ls="ls --color"
    ;;
esac

alias la="ls -a"
alias lf="ls -F"
alias ll="ls -l"

alias du="du -h"
alias df="df -h"

alias su="su -l"

case "${OSTYPE}" in
darwin*)
    alias updateports="sudo port selfupdate; sudo port outdated"
    alias portupgrade="sudo port upgrade installed"
    ;;
freebsd*)
    case ${UID} in
    0)
        updateports() 
        {
            if [ -f /usr/ports/.portsnap.INDEX ]
            then
                portsnap fetch update
            else
                portsnap fetch extract update
            fi
            (cd /usr/ports/; make index)

            portversion -v -l \<
        }
        alias appsupgrade='pkgdb -F && BATCH=YES NO_CHECKSUM=YES portupgrade -a'
        ;;
    esac
    ;;
esac


## terminal configuration
#
unset LSCOLORS
case "${TERM}" in
xterm)
    export TERM=xterm-color
    ;;
kterm)
    export TERM=kterm-color
    # set BackSpace control character
    stty erase
    ;;
cons25)
    unset LANG
    export LSCOLORS=ExFxCxdxBxegedabagacad
    export LS_COLORS='di=01;34:ln=01;35:so=01;32:ex=01;31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'
    zstyle ':completion:*' list-colors \
        'di=;34;1' 'ln=;35;1' 'so=;32;1' 'ex=31;1' 'bd=46;34' 'cd=43;34'
    ;;
esac

# set terminal title including current directory
#
case "${TERM}" in
kterm*|xterm*)
    precmd() {
        echo -ne "\033]0;${USER}@${HOST%%.*}:${PWD}\007"
    }
    export LSCOLORS=exfxcxdxbxegedabagacad
    export LS_COLORS='di=34:ln=35:so=32:pi=33:ex=31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'
    zstyle ':completion:*' list-colors \
        'di=34' 'ln=35' 'so=32' 'ex=31' 'bd=46;34' 'cd=43;34'
    ;;
esac


## load user .zshrc configuration file
#
[ -f ~/.zshrc.mine ] && source ~/.zshrc.mine

対応するOSはLinux、FreeBSD、Mac OS Xだ。動作はそれぞれUbuntu 7.04 (zsh 4.3.2)、FreeBSD-current/stable (zsh 4.3.2)、OS X 10.4.10 Tiger(zsh 4.2.3)で確認してある。本連載の第10回目に設定ファイルの説明があるので、興味がある野郎どもは読んでみてほしい。コピペしてとりあえず使ってみるのもまたよしだ。変更されたところがあるので、以下では第10回目で紹介した設定ファイルから変更されたところを説明しておく。

リモートログイン時における色の変更 : OSXでの不具合に対応

リスト2.1を見て欲しい。

リスト2.1 リモートログイン時のホスト名のカラーを変更 - 文字も大文字へ変更


 [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && 
        PROMPT="%{${fg[cyan]}%}$(echo ${HOST%%.*} | tr '[a-z]' '[A-Z]') ${PROMPT}"

本連載の第10回目で公開した設定ファイルでは、リモートログインしたときに表示されるプロンプトのホスト名の部分が真っ白でなにも表示されないという問題があることが分かった。Mac OS Xのターミナルで色としてwhiteを指定するとまったく見えなくなるようだ。そのため、色を変更しておいた。それぞれ図2.1~図2.3のような色で表示される。

図2.1 リモートログインした場合のプロンプト - gnome-terminal + zsh 4.3.2 on FreeBSD-current

図2.2 リモートログインした場合のプロンプト - gnome-terminal + zsh 4.3.2 on Ubuntu 7.04

図2.3 リモートログインした場合のプロンプト - ターミナル + zsh 4.2.3 on Mac OS X 10.4.10

それから、リモートログインしているプロンプトをローカルプロンプトと間違えて作業することがあるので、ホスト名を大文字で表示して強調するようにした。

zshエディタのロード

リスト3.1を見て欲しい。

リスト3.1 zshで作成されたエディタzedを読み込む設定を追加


## zsh editor
#
autoload zed

本連載の第11回目でzshで実装されたエディタであるzedを紹介したが、今回、このエディタ関数をデフォルトで読み込むように設定に追加した。デフォルトで読み込まれる関数を表示したり、簡単な関数を作成する場合に便利なツールなので、読み込んでおいて損はないというわけだ。

コマンド補完ファイルを設置するパス設定

次にリスト4.1を見てみよう。

リスト4.1 コマンド補完ファイルを置いておくディレクトリを指定 : /.zsh/functions/Completion/ ここに置いておけばいい


## Completion configuration
#
fpath=(~/.zsh/functions/Completion ${fpath})
autoload -U compinit
compinit

コマンド補完ファイルは指定したディレクトリに置いておくことで、シェル起動時に自動的に読み込まれるようになる。その設定を追加しておいた。ここではzshのデフォルトのディレクトリツリーを真似して~/.zsh/functions/Completion/に置けばいいようになっている。パスは好みで変えてみればよいだろう。

コマンド補完設定で便利なものが溜まってきたらどうやって公開しようか考えているわけだが……。コピペして完了させたいので、公開するときは1つのファイルにまとめてしまおうかとも考えている。

OSごとの設定、エイリアスと関数の使い分けのサンプルとか

設定のサンプルとしてリスト5.1も含めてある。

リスト5.1 Mac OS XとFreeBSDでの設定例など


case "${OSTYPE}" in
darwin*)
    alias updateports="sudo port selfupdate; sudo port outdated"
    alias portupgrade="sudo port upgrade installed"
    ;;
freebsd*)
    case ${UID} in
    0)
        updateports() 
        {
            if [ -f /usr/ports/.portsnap.INDEX ]
            then
                portsnap fetch update
            else
                portsnap fetch extract update
            fi
            (cd /usr/ports/; make index)

            portversion -v -l \<
        }
        alias appsupgrade='pkgdb -F && BATCH=YES NO_CHECKSUM=YES portupgrade -a'
        ;;
    esac
    ;;
esac

OSTYPE変数でOSごとに処理の振り分け、UID変数で管理者ユーザと一般ユーザごとに処理を分岐、短い処理はエイリアスでコマンド化、長い処理は関数でコマンド化といったところだ。Mac OS Xの場合、ユーザで振り分けるのではなくsudoコマンドを使うようにしてある。Mac OS Xの方はMacPortsを使ってアプリケーションを更新する用のショートカットで、FreeBSDの方はPorts Collectionを使ってアプリケーションを更新する用のショートカットだ。OSを混在させる場合の基本的な処理方法なので、何かの参考にしてもらえればと幸いである。

それでは、Let's enjoy zsh !!

22/24

インデックス

連載目次
第24回 グッバイ野郎ども! コピペではじめるzshファイナル
第23回 コマンド補完設定 - アーキテクチャタイプ編
第22回 もってけ泥棒! コピペで始めるzsh - リターンズ
第21回 コマンド補完設定 - ファイルシステムタイプ編
第20回 コマンド補完設定 - cal/ncalコマンド編
第19回 コマンド補完設定 - trafshowコマンド編
第18回 コマンド補完設定 - daemonコマンド編(2)
第17回 コマンド補完設定 - daemonコマンド編(1)
第16回 拡張子ごとにコマンドを自動実行 - 「alias -s」
第15回 **で簡単ヒット!!! - 漢達への熱いお願い付き
第14回 zshとscreenで最強のターミナル環境
第13回 タブキーは最強だ - ファイルグロブもサクっと展開
第12回 一時ファイルはもういらない - プロセス置換
第11回 zshはエディタか? - 「zed」でお手軽編集
第10回 もってけ泥棒! コピペで始めるzsh
第9回 世界はモノクロからカラーへ
第8回 これは既にシェルを超えている…… zshの算術演算
第7回 ひと味違うzshのリダイレクト
第6回 漢はだまって先方予測 - あなたはこの機能使いこなせるか
第5回 「あーっ!」というそのときのために - 備えあれば憂いなしの設定集
第4回 コマンド履歴の検索~EmacsとVi、どっちも設定できるぜzsh
第3回 同じことを2度するなんて…… 自分の過去は利用しましょう
第2回 取りあえず、プロンプトを整えておく。カッコつけたいからね
第1回 最強のシェル、それは「zsh」

もっと見る



転職ノウハウ

あなたが本領発揮できる仕事を診断
あなたの仕事適性診断

シゴト性格・弱点が20の質問でサクッと分かる!

「仕事辞めたい……」その理由は?
「仕事辞めたい……」その理由は?

71%の人が仕事を辞めたいと思った経験あり。その理由と対処法は?

3年後の年収どうなる? 年収予報
3年後の年収どうなる? 年収予報

今の年収は適正? 3年後は? あなたの年収をデータに基づき予報します。

激務な職場を辞めたいが、美女が邪魔して辞められない
激務な職場を辞めたいが、美女が邪魔して辞められない

美人上司と可愛い過ぎる後輩に挟まれるエンジニアの悩み

人気記事

一覧

イチオシ記事

新着記事

[真田丸]高畑容疑者の出演見送り 親子共演が消滅
[22:14 8/24] エンタメ
iiyama PC、"Broadwell-E"とGeForce GTX 1060搭載の「4K動画編集」向けPC
[22:06 8/24] パソコン
[日本テレビ]高畑容疑者出演の24時間テレビSPドラマは代役で撮り直し
[21:33 8/24] エンタメ
「ナンバカ」主題歌&放送情報が解禁、オープニング聞ける新PVも
[21:00 8/24] ホビー
TVアニメ『ナンバカ』、PV第2弾を公開! 放送情報および主題歌も発表
[21:00 8/24] ホビー

求人情報