zsh は, 設定内容が多岐にわたり,
1 つのファイルに全てをまとめてしまおうとするとメンテナンスが大変なので,
ある程度ファイルを分割してしまいます.
なお, zsh そのものが本当に呼び出すファイルは,
.zshenv と .zshrc (ログインシェルならば, .zprofile も) だけですが,
.zshrc 内で source
コマンドを使うことによって,
残りの設定ファイルを読み出します.
まずは, mkdir
コマンドで,
ホームディレクトリの直下に .zsh
ディレクトリを作り,
そこに移動します.
次に, .zaliases, .zcompctl, .zprofile, .zshenv, .zshrc の
5 つの設定ファイルを作ります
(この時点では, 空のファイルでも問題ありません.).
最後に, ホームディレクトリに移り,
.zsh/.zshenv に向けてのシンボリックリンクを貼ります
(ln -s .zsh/.zshenv .
).
いよいよ, ファイルの内容を記述していきます. まずは, .zshenv からです.
# -*- mode:shell-script -*- ZDOTDIR=$HOME/.zsh export ZDOTDIR
.zprofile に関しては, 特に記述する事が無いので, 空のままでいいです.
次は, .zaliases です.
less
関連のエイリアスは, 必要なくなりました.
less
の不調の原因は,
$HOME/.termcap というファイルが原因でした.
alias ls='ls --show-control-chars --color=auto -F' alias rm='rm -i'alias clear="echo -n '\033(B\003[H\033[J' ; clear" alias less="TERM=linux less" alias man="TERM=linux man"
次は, zsh の真骨頂といえる, 補間ルールを記述したファイル,
.zcompctl です.
このファイルの設定次第で, zsh の使い心地が全然変わってしまうので,
以下のサンプルを丸写しせずに, man
をみたり,
いろいろな情報を探してみましょう.
なお, 日本語でコメントを書きたい場合は,
文字コードを EUC-JP にしておきます.
# -*- mode:shell-script -*- #echo -n ".zcompctl " # Argument for limit/unlimit limitargs=( addressspace aiomemorylocked aiooperations cachedthreads coredumpsize cputime datasize descriptors filesize maxproc maxpthreads memorylocked memoryuse resident sockbufsize stacksize vmemorysize ) # Argument for cvs cvs_option=( add admin annotate checkout commit diff edit editors export history import init log login logout rdiff release remove rtag status tag unedit update watch watchers ) # Argument for network hosts=( localhost 127.0.0.1 ) urls=( www.google.com www.google.co.jp www.yahoo.com www.yahoo.co.jp ) # Environment compctl -c man w3mman which # Interpolation list for command name compctl -l '' nice exec screen # Interpolation for cmd arg1 arg2 ... compctl -E printenv setenv compctl -v -E vared unset # シェル変数、環境変数 # Graphic Tools compctl -g '*.obj' + -g '(|.)*(-/)' tgif compctl -g '*.png' + -g '(|.)*(-/)' pngtopnm # Netpbm Tools compctl -g '*.pbm' + -g '(|.)*(-/)' pbmclean pbmlife pbmmake pbmmask \ pbmpage pbmpscale pbmreduce pbmtext pbmtextps pbmto10x pbmtoascii \ pbmto4425 pbmtoatk pbmtobbnbg pbmtocmuwm pbmtoepsi pbmtoepson \ pbmtog3 pbmtogem pbmtogo pbmtoicon pbmtolj pbmtoln03 pbmtolps \ pbmtomacp pbmtomda pbmtomgr pbmtonokia pbmtopgm pbmtopi3 pbmtopk \ pbmtoplot pbmtoppa pbmtopsg3 pbmtoptx pbmtowbmp pbmtox10bm pbmtoxbm \ pbmtoybm pbmtozinc pbmupc compctl -g '*.pgm' + -g '(|.)*(-/)' pgmabel pgmbentley pgmcrater \ pgmedge pgmenhance pgmhist pgmkernel pgmminkowski pgmmorphconv \ pgmnoise pgmnorm pgmoil pgmramp pgmslice pgmtexture pgmtofs \ pgmtolispm pgmtopbm pgmtopgm pgmtoppm compctl -g '*.ppm' + -g '(|.)*(-/)' ppm3d ppmbrighten ppmchange \ ppmcie ppmcolormask ppmcolors ppmdim ppmdist ppmdither ppmfade \ ppmforge ppmflash ppmhist ppmlabel ppmmake ppmmix ppmnorm ppmntsc \ ppmpat ppmquant ppmquantall ppmrainbow ppmrelief ppmrough ppmshadow \ ppmshift ppmspread ppmtoacad ppmtoarbtxt ppmtobmp ppmtoeyuv ppmtoicr \ ppmtogif ppmtoilbm ppmtojpeg ppmtoleaf ppmtolj ppmtomap ppmtomitsu \ ppmtompeg ppmtoneo ppmtopcx ppmtopgm ppmtopi1 ppmtopict ppmtopj \ ppmtopjxl ppmtoppm ppmtopuzz ppmtorgb3 ppmtosixel ppmtoterm ppmtouil \ ppmtowinicon ppmtoxpm ppmtoyuv ppmtoyuvsplit ppmtv ppmwheel compctl -g '*.p(b|g|p)m' + -g '(|.)*(-/)' pnmalias pnmarith pnmcat \ pnmcolormap pnmcomp pnmconvol pnmcrop pnmcut pnmdepth pnmenlarge \ pnmfile pnmflip pnmgamma pnmhisteq pnmhistmap pnmindex pnminterp \ pnminvert pnmmargin pnmmontage pnmnlfilt pnmnoraw pnmnorm pnmpad \ pnmpaste pnmpsnr pnmquant pnmremap pnmrotate pnmscale pnmscalefixed \ pnmshear pnmsmooth pnmsplit pnmstitch pnmtile pnmtoddif pnmtofiasco \ pnmtofits pnmtojbig pnmtojpeg pnmtopalm pnmtopclxl pnmtoplainpnm \ pnmtopng pnmtops pnmtorast pnmtorle pnmtosgi pnmtosir pnmtotiff \ pnmtotiffcmyk pnmtoxwd # TeX, DVI, PostScript, Adobe PDF compctl -g '*.(tex|ins|dtx)' tex jtex ptex latex jlatex platex compctl -g '*.dvi' xdvi dviselect dvips dvi2ps dvipdfm dvipdfmx compctl -g '*.(e|)ps' + -g '(|.)*(-/)' gv ghostview ps2pdf compctl -g '*.pdf' + -g '(|.)*(-/)' acroread # Archive Utilities compctl -f -x \ 'C[-1,*(e|t|l|v|x)*] p[2]' -g "*.lzh (|.)*(-/)" -- lha compctl -g '*.zip' + -g '(|.)*(-/)' unzip zipinfo compctl -g '*.(gz|z|Z)' + -g '(|.)*(-/)' gunzip zcat compctl -g '*.bz2' + -g '(|.)*(-/)' bunzip2 bzcat compctl -f -x \ 'C[-1,*z*] p[2]' -g "*.tar.gz *.tgz (|.)*(-/)" - \ 'C[-1,*Z*] p[2]' -g "*.tar.(Z|z) *.taz (|.)*(-/)" - \ 'C[-1,*(j|I)*] p[2]' -g "*.tar.bz2 *.tbz (|.)*(-/)" - \ 'C[-1,*f*] p[2]' -g "*.tar (|.)*(-/)" -- tar # Development compctl -g '*.exe' + -g '(|.)*(-/)' gdb compctl -f -x 'p[1]' -k cvs_option -- cvs compctl -g '*.po' + -g '(|.)*(-/)' msgfmt # configure script configre_opts () { reply=( `./configure --help | awk '/--/{print $1}' |\ sed -e 's/--//' -e 's/=.*/=/'` ) } compctl -x 'n[1,=]' -f -- + -P -- -K configre_opts configure # Network #compctl -k hosts slogin telnet ftp ncftp ping nslookup traceroute xhost #compctl -f -k hosts rsh ssh #compctl -K ftp_hosts_complete ftp ncftp compctl -f -x 's[http://]' -k hosts -k urls - \ 'p[1]' -g "*.htm(|l) (|.)*(-/)" -- w3m lynx netscape iexplore mozilla # Mathematics compctl -g '*.plt' + -g '(|.)*(-/)' gnuplot compctl -g '*.xls *.csv' + -g '(|.)*(-/)' msexcel # System compctl -g '(|.)*(-/)' cd chdir pushd compctl -o setopt compctl -k limitargs limit unlimit # limit と unlimit の補完候補は $limitargs compctl -x 's[-]' -k signals -- kill compctl -v -x 's[DISPLAY=]' -k hosts -S ':0' -- export # export の引数は変数(-v)だが、 DISPLAY= で始まっていると # ホスト名で補完して、末尾に :0 を付ける # Miscellaneous compctl -g '/var/db/pkg/*(:t) pkg_info pkg_delete # /var/db/pkg 下のファイルの basename を補完候補に compctl -f -x 's[-P]' -k printers -- lpr lpq lprm prn compctl -x 's[if=] , s[of=]' -f -- dd edd function _folders () { reply=(`folders -recurse -fast`) } compctl -x 's[+]' -K _folders -- folders folder scan packf # 補完時にシェルコマンドを呼出す例
最後に, .zshrc です.
# -*- mode:shell-script -*- source $ZDOTDIR/.zaliases source $ZDOTDIR/.zcompctl HISTSIZE=512 HISTFILE="$ZDOTDIR/.zsh_history" SAVEHIST=256 PATH=/usr/local/bin:/usr/X11R6/bin:/usr/bin:/bin:/usr/local/htmllint:$HOME/cmd export PATH MANPATH=/usr/local/share/man:/usr/local/man:/usr/share/man:/usr/man LD_RUN_PATH=/usr/local/lib:/usr/lib:/usr/X11R6/lib LD_LIBRARY_PATH=$LD_RUN_PATH PROMPT=$'\n%{\e[0;32;40;1m%}%n%{\e[0m%}\n%{\e[0;37;40;1m%}$%{\e[0m%} ' PS1=$PROMPT RPROMPT=$'%{\e[1;36m%}[%~]%{\e[0m%}' PAGER='less -is' WGETRC=$HOME/.wgetrc CVSROOT=$HOME/CVSROOT LANG=ja_JP.SJIS EMACS=f:/MEADOW/1.15/bin/meadow.exe LISPDIR=f:/MEADOW/site-lisp TEXMF=/usr/local/share/texmf TEXMFMAIN=/usr/local/share/texmf TEXMFCNF=/usr/local/share/texmf/web2c TZ='JST-9' #GS_LIB=c:/gs/gs8.00/lib\;c:/gs/gs8.00/kanji\;c:/gs/fonts export MANPATH LD_RUN_PATH LD_LIBRARY_PATH export PS1 PROMPT RPROMPT WGETRC CVSROOT export LANG PAGER export TEXMF TEXMFMAIN TEXMFCNF export EMACS LISPDIR export TZ #export GS_LIB if [ -n ${DISPLAY} ]; then export DISPLAY=localhost:0.0 fi if [ ! -n "${TERM}" ]; then #TERM=cygwin TERM=linux fi unset COMSPEC fignore=('.o' '~') setopt autocd automenu autolist correct nobeep nonomatch setopt listtypes pushdsilent setopt histignoredups setopt notify setopt printexitvalue ulimit -c 0 unsetopt prompt_cr stty -istrip bindkey -m # Enable META key bindkey -e # Key bind like Emacs limitargs=(cputime filesize datasize stacksize coredumpsize resident maxproc descripters)
ここまで出来たら, シェルを再起動するなり,
source
コマンドで, .zshenv と .zshrc を呼び出すなりして,
設定を読み込みます. zsh での作業イメージを載せておきます.