Hatena::ブログ(Diary)

cooldaemonの備忘録 RSSフィード

2006-02-06

設定ファイルさらし

自分以外は役に立たん(w;

.zshrc

umask 002
cdpath=(~)
SVN_EDITOR=vi

test -r /sw/bin/init.sh && . /sw/bin/init.sh

setopt AUTOPUSHD
setopt PUSHD_IGNORE_DUPS
setopt AUTO_CD

source ~/.zshrc.bindkey
source ~/.zshrc.prompt
source ~/.zshrc.complete
source ~/.zshrc.history
source ~/.zshrc.screen
source ~/.zshrc.alias

/sw/bin/init.sh は Fink の初期化Script。

持ち歩きを考えると、.zshrc に全ての設定を納めるべきなんだが・・・、(自分の)可読性重視でファイルを分ける。

.zshrc.bindkey

bindkey -v
bindkey '^P' history-beginning-search-backward
bindkey '^N' history-beginning-search-forward
bindkey '^R' history-incremental-search-backward

vi 使いにとって、bindkey -v は必須!(Emacsキーバインドは bindkey -e)

bindkey -e で使える '^R' を追加し、ついでに '^P' と '^N' による補完入力も使えるようにする。

.zshrc.prompt

setopt prompt_subst

autoload -U colors
colors

PROMPT='${WINDOW:+"[$WINDOW]"}%{$fg[green]%}`whoami`@`hostname`%#%{$reset_color%
} '
RPROMPT='%{$fg[yellow]%}[%(4~,%-1~/.../%2~,%~)%{$fg[red]%}:%!%{$fg[yellow]%}]%{$reset_color%}'

zsh を使っていて、右プロンプトを表示しない手はない(笑

%(4~,%-1~/.../%2~,%~) で、4階層以上のディレクトリに潜った場合に、最上位1階層と下位2階層を表示する。

$WINDOW 使うと screen の番号が出て便利。

.zshrc.complete

_cache_hosts=(xxxx.jp xxx.xxx.xxx.xxx)
autoload -U compinit
compinit -u

eval `dircolors ~/.dircolors`
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}

zstyle ':completion:*:cd:*' tag-order local-directories path-directories
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
zstyle ':completion:*:default' menu select=1

.dircolors は 「dircolors -p > .dircolors」とかで作れます。

私は、OSX付属の Terminal を使っており、バックグラウンドが透ける設定をしているので、少し表示色をいじって見やすくしている。

_cache_hosts には、ssh や telnet コマンドの補完候補の一覧を入れる。

.zshrc.history

HISTFILE=$HOME/.zsh-history
HISTSIZE=100000
SAVEHIST=100000

setopt EXTENDED_HISTORY
setopt SHARE_HISTORY
setopt HIST_IGNORE_DUPS
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_IGNORE_SPACE
setopt HIST_REDUCE_BLANKS
setopt HIST_NO_STORE
setopt LIST_PACKED
setopt PRINT_EIGHT_BIT

TAB 補完だけでも幸せになれるんですが、history もフル活用の方向で。

C-r でインクリメンタル検索とか、すごく便利。

.zshrc.screen

if [ "$TERM" = "screen" ]; then 
    chpwd () { echo -n "^[_`dirs`^[??" }

    preexec() {
        emulate -L zsh
        local -a cmd; cmd=(${(z)2})
        case $cmd[1] in
            fg)     
                if (( $#cmd == 1 )); then
                    cmd=(builtin jobs -l %+)
                else    
                    cmd=(builtin jobs -l $cmd[2])
                fi      
                ;;      
            %*)     
                cmd=(builtin jobs -l $cmd[1])
                ;;      
            cd)     
                if (( $#cmd == 2)); then
                    cmd[1]=$cmd[2]
                fi      
                ;&      
            *)      
                echo -n "^[k$cmd[1]:t^[??"
                return  
                ;;      
        esac    

        local -A jt; jt=(${(kv)jobtexts})

        $cmd >>(read num rest
                cmd=(${(z)${(e):-?$jt$num}})
                echo -n "^[k$cmd[1]:t^[??") 2>/dev/null
    }
    chpwd   
fi

screen 用の設定。実行したコマンドが window のタイトルとなる。

「?」と記載されている箇所は、全て「¥」(もしくは「/」)です(「はてなダイアリー」の問題?)。

.zshrc.alias

alias gd='dirs -v; echo -n "select number: "; read newdir; cd -"$newdir"'
alias -g lG='| grep '
alias -g lM='| more'

alias gvim='~/bin/gvim.sh'

alias l='ls -F --color=auto'
alias ls='ls -F --color=auto'
alias la='ls -a --color=auto'
alias ll='ls -la --color=auto'

function chpwd() { ls }

alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'

alias h='history'
alias ha='history -E 1'
alias j='jobs'
alias df='df -h'
alias du='du -h'

仕事関連が多いので、一般的なもの意外は割愛。

.tcshrc から、まだまだ移行しきれてないので、今後、随時いじっていく予定。

参考サイト

UNIX 今日の技/zsh

横着プログラミング 第三回:履歴マニア

ari's diary 2002年6月14日

ドットファイルの例

Introduction of the ZSH

FreeBSD なあなたのための zsh (The Z Shell) 設定

zshのある暮らし

zshのある暮らし Wiki

SSH と shell の補完 (completion)