Announce

PukiWiki contents have been moved into SONOTS Plugin (20070703)

zsh

zshの設定メモ

Table of Contents

.zprofile (.zlogin) -> .zshrc -> .zshenv (shell script). .zlogout

ls **
wget http://hoge.com/{01..20}.html . 

.zshrc

unsetopt promptcr
setopt print_eight_bit
bindkey -e
WORDCHARS='*?_-.[]~=&;!#$%^(){}<>'
HISTSIZE=10000
SAVEHIST=10000
setopt hist_ignore_all_dups hist_save_nodups
setopt share_history
setopt listpacked
LISTMAX=10000

http://wiki.fdiary.net/zsh/?FAQ%40zsh%A5%B9%A5%EC

autoload -U compinit
compinit -u
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
zstyle ':completion:*:default' menu select true

http://wiki.fdiary.net/zsh/?%CA%E4%B4%B0

候補が tab でクルクル変わるのを止める

unsetopt auto_menu

bash, tcsh に慣れている人には良い。もしくは

zstyle ':completion:*:default' menu select true

をしておけば Enter で確定にできるので、それで止めるのも良い。zshならではっぽくて良い。

http://dengaku.org/naoki/zsh/intro/intro-Completion.html ←古いのか?

.zshrc

[1] のコピーから、PROMPT変更、compinit -u、あとごにょごにょしたもの. envmerge はいつもおいらが使っているもの

envmerge () {
    var=`eval echo '$'$1`
    if ! echo $var | /bin/egrep -q "(^|:)$2($|:)" ; then
        if [ "$3" = "after" ] ; then ; eval $1='$var:$2'
        else ; eval $1='$2:$var' ; fi
    fi
}
envmerge PATH ~/bin
envmerge PATH ~/usr/bin
envmerge LD_LIBRARY_PATH ~/usr/lib
envmerge PKG_CONFIG_PATH ~/usr/lib/pkgconfig
envmerge MANPATH ~/usr/man
export PATH
export LD_LIBRARY_PATH
export PKG_CONFIG_PATH
export MANPATH

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

## Default shell configuration
#
# set prompt
#
autoload colors
colors
PROMPT="
%{${fg[green]}%}%n@%M%{${reset_color}%} %{${fg[yellow]}%}%~%{${reset_color}%
}
"

# 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

# no beep
#
setopt NO_beep

# Do not send SIGHUP at exit
#
setopt nohup

# Do not check running jobs at exit
#
setopt nocheckjobs

## 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
#
autoload -U compinit
compinit -u

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

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

case "${OSTYPE}" in
freebsd*|darwin*)
  ;;
linux*)
  e () { konqueror $@ & }
  ;;
cygwin)
  alias e="explorer"
  ;;
esac

alias j="jobs -l"
alias la="ls -a"
alias lf="ls -F"
alias ll="ls -l"
alias du="du -h"
alias df="df -h"
alias su="su -l"

## 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

ls --colors

$ dircolors -p ~/.dircolorsrc
$ eval `dircolors ~/.dircolorsrc`

PROMPT

おそらく tcsh と共通がおおし

http://technique.sonots.com/?.cshrc#k430446b

FAQ

Q. Ignore insecure directories and continue [ny]?

A. compinit -u

Q. 3.18: ログアウトするとバックグラウンドジョブが死んでしまう

簡単な答え: kill しないように指定していないから。zsh には(csh/tcsh と異なり)、バックグラウンドジョブを kill するかどうかのオプションが ある。ログアウト時にバックグラウンドジョブを kill したくないのであれば、 `nohup' オプションを設定すれば良い。また、このオプションを指定してい る/いないに関わらず、頭に `nohup' を付けてコマンドを起動しても同様の 効果が得られる。(`nohup' は外部コマンドである)

内部コマンド `disown' は以下のような状況で大変便利である: ログアウト しようとした時に、zsh が "you have running jobs." と報告をするなら、 そこで、`disown' と入力することで、それらのプロセスを kill すること なくログアウトすることができる。(`disown' はそれらの子プロセスを「勘 当」するコマンドである)。同様に、シェルとの対話を行なわないコマンド (新しいウィンドウを作る X のアプリケーションなど)を起動した時に、シェ ルとの関係を切り離すのにも使える。また、バックグラウンドジョブの開始 に & を使わず、&! を使うようにする と、そのジョブは自動的に disown される。

cygwin

cygwin.bat を書き換えるのもめんどうくさいので、.bash_profile あたりで

exec zsh

としたらどうだろう。

References