一回じゃ入らんからエントリ分けるよ・・・
# # kcrt's .zshrc file for Fedora/Debian # Written by kcrt <kcrt__atmark__kcrt.net> # Nanoseconds Hunter "http://www.kcrt.net" # Id: $Id$ # # ----- とりあえず stty stop undef # ^Sとかを無効にする。 # ----- 色宣言 typeset -A hostcolors typeset -A hostblacks hostcolors=(kuro green fro cyan sphe yellow pele magenda) hostblacks=(kuro 001100 fro 001111 sphe 001111 pele 110000) hostcolor=blue if [[ $hostcolors[$HOST] = "" ]]; then hostcolor=blue hostblack="000000" else hostcolor=$hostcolors[$HOST] hostblack=$hostblacks[$HOST] fi export hostcolor export hostblacks # ----- xterm(screen上以外での起動)だと思われる if [[ "$TERM" == "xterm" ]]; then # 色の個別設定 - うまく動かない端末もあります echo -n "^[]R" # first, reset the palette echo -n "^[]P0$hostblack" # black echo -n "^[]P1FF0000" # red echo -n "^[]P200CC00" # green echo -n "^[]P3CCCC00" # yellow echo -n "^[]P45555FF" # blue echo -n "^[]P5FF00FF" # magenta echo -n "^[]P600FFFF" # cyan echo -n "^[]P7CCCCCC" # white echo -n "^[]P8888888" # BLACK echo -n "^[]P9FFAAAA" # RED echo -n "^[]PA88FF88" # GREEN echo -n "^[]PBFFFFAA" # YELLOW echo -n "^[]PC7777FF" # BLUE echo -n "^[]PDFFCCFF" # MAGENTA echo -n "^[]PE88FFFF" # CYAN echo -n "^[]PFEEEEEE" # WHITE # タイトルバーの文字列 if [[ "$SSH_CONNECTION" != "" ]]; then # ssh接続 tmpTitle=`echo -n $SSH_CONNECTION | sed -e 's/¥(.*¥) .* ¥(.*¥) .*/¥1 --> ¥2/g'` echo "^[]2;$HOST($tmpTitle, ssh)¥a" elif [[ "$REMOTEHOST" != "" ]]; then # おそらくtelnet echo -n "^[]2;$REMOTEHOST --> $HOST¥a"; else # ローカルと見た echo -n "^[]2;$HOST (local)¥a" fi fi # ----- 環境変数 export EDITOR="vim" # やっぱりvimだねっ export COLOR="tty" # ----- 色関係 autoload colors # $color[red]とかが使えるようになる。 colors eval `dircolors -b` zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} # 補完も色つける # ----- autoloadたち autoload -U compinit compinit -u autoload zmv autoload zargs autoload zsh/files # 設定はNOを頭につけると逆の意味になるよ! # ----- 補完 LISTMAX=200 # 表示する最大補完リスト数 setopt auto_list # 曖昧な補完で自動的にリスト表示 setopt NO_menu_complete # 一回目の補完で候補を挿入(cf. auto_menu) setopt auto_menu # 二回目の補完で候補を挿入 setopt magic_equal_subst # (?) --include=/usr.. などの=補完を有効に setopt NO_complete_in_word # TODO:よくわからない setopt list_packed # 補完候補をできるだけつめて表示する setopt NO_list_beep # 補完候補表示時にビープ音を鳴らす setopt list_types # ファイル名のおしりに識別マークをつける # ----- 履歴 HISTFILE="$HOME/.zhistory" # 履歴保存先 HISTSIZE=1000 # 使用する履歴数 SAVEHIST=1000 # 保存する履歴数 setopt hist_ignore_space # スペースで始まるコマンドを記録しない setopt hist_ignore_all_dups # 重複した履歴を記録しない setopt share_history # ターミナル間の履歴を共有する setopt append_history # 履歴を追記する # ----- ファイル操作関連 setopt auto_cd # ディレクトリ名でcd setopt auto_remove_slash # 不要なスラッシュをはずす setopt auto_pushd # 自動的にpushd setopt pushd_ignore_dups # 重複したディレクトリスタックを記録しない setopt correct # コマンドのスペル補正 setopt correct_all # コマンド以外もスペル補正 setopt equals # =zshとかが置換される setopt extended_glob # 拡張グロブ有効 # ----- そのほかの設定 setopt print_eight_bit # 8ビット文字表示 setopt prompt_subst # プロンプトでのコマンド置換などを有効に setopt beep # エラー時にはBeep音 setopt NO_emacs # viが一番! setopt NO_flow_control # ^S/^Qを有効に # ----- プロンプト # PROMPT='%{^[[%(!.31.32)m%}[%n@%m]%# %{^[[m%}' PROMPT='%{%(!.$fg[red].$fg[$hostcolor])%}[%n@%m]%# %{$reset_color%}' # 最後に実行したプログラムがエラーだと反転するよ。 RPROMPT=' %{%(?.$fg[cyan].$bg[cyan]$fg[black])%} [%~] %{$reset_color%}' # ----- キー bindkey -v bindkey '^z' push-line bindkey '^y' run-help bindkey '^[[A' up-line-or-history bindkey '^[[B' down-line-or-history # ----- 自分用関数 ShowStatus(){ # モードの切り替え時に右上にモードを表示 integer Cursor_X integer Cursor_Y integer StrLength StrLength=$(echo -n $1 | wc -m) Cursor_X=$[COLUMNS-$StrLength] # 場所はお好みで Cursor_Y=1 echo -n "^[[s" # push pos echo -n "^[[$[$Cursor_Y];$[$Cursor_X]H" # set pos echo -n "^[[07;37m$1^[[m" # print echo -n "^[[u" # pop pos } # viins <-> vicmd {{{ Vi_ToCmd(){ ShowStatus "-- NORMAL --" builtin zle .vi-cmd-mode } Vi_Insert(){ ShowStatus "-- INSERT --" builtin zle .vi-insert } Vi_InsertFirst(){ ShowStatus "-- INSERT --" builtin zle .vi-insert-bol } Vi_AddNext(){ ShowStatus "-- INSERT --" builtin zle .vi-add-next } Vi_AddEol(){ ShowStatus "-- INSERT --" builtin zle .vi-add-eol } Vi_Change(){ ShowStatus "-- INSERT --" builtin zle .vi-change } zle -N Vi_ToCmd zle -N Vi_Insert zle -N Vi_InsertFirst zle -N Vi_AddNext zle -N Vi_AddEol zle -N Vi_Change bindkey -M viins "^[" Vi_ToCmd bindkey -M vicmd "i" Vi_Insert bindkey -M vicmd "I" Vi_InsertFirst bindkey -M vicmd "a" Vi_AddNext bindkey -M vicmd "A" Vi_AddEol bindkey -M vicmd "c" Vi_Change bindkey -M vicmd "/" history-incremental-search-backward bindkey -M vicmd "^P" vi-repeat-search bindkey -M vicmd "^N" vi-rev-repeat-search # vi-repeat-search bindkey "^Q" self-insert # }}} # ----- 関数 function _w3m(){ :title w3m $1 if [[ $1 == "" ]]; then w3m http://www.google.co.jp else w3m $@ fi :title $SHELL } function :whatsnew(){ vimdiff $1 =(svn cat --revision HEAD $1) } fucntion :whatchanged(){ vimdiff $1 =(svn cat --revision PREV $1) } function trash(){ if [ $# = 0 ]; then command rm return 1 fi if [ ! -d ~/.trash ]; then echo "ERROR : ~/.trash not found!" return 1 fi mv $@ ~/.trash || return if [ $# = 1 ]; then echo "'$1' was moved into trash!" else echo "$# files were moved into trash!" fi } # ----- エイリアス # コマンド置き換え alias vi='vim -p' alias rm='trash' alias w3m='_w3m' # 引数 alias ls='ls -F --color=tty' alias du='du --human-readable -s ./*' alias df='df --human-readable' alias grep='grep --color -a' alias less='less --ignore-case --status-column --prompt="?f%f:(stdin).?m(%i/%m files?x, next %x.). ?c<-%c-> .?e(END):%lt-%lb./%Llines" --hilite-unread --tabs=4 --window=-5' alias pstree='pstree -p' alias cal='cal -3' alias zmv='noglob zmv -W' alias zcp='noglob zmv -C' alias zln='noglob zmv -L' # 省略とか alias la='ls -F -a --color=tty' alias ll='ls -F -la --color=tty --sort=time --reverse' alias hist='history' alias :q='exit' alias su='su -s =zsh' alias hexdump='od -Ax -tx1z -v' alias beep='print "¥a"' alias cls='clear' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..' alias :kuro='ssh kuro' if [[ -x /usr/bin/man ]]; then compdef _man w3mman alias man='w3mman' fi # ----- suffix alias (関連づけ) alias -s txt='cat' alias -s log='tail -f -n20' alias -s html='w3m' function viewxls(){ w3m -T text/html =(xlhtml $1) } alias -s xls='viewxls' # ----- root用の設定 if [[ $USER != 'root' ]] ; then alias updatedb="sudo updatedb; beep" alias taillog='sudo tail -f -n20 /var/log/syslog' # Fedoraはデフォルトで設定されてない zstyle ':completion:*:sudo:*' command-path /usr/sbin /usr/bin /sbin /bin /usr/local/sbin export PATH=$PATH:/usr/sbin:/sbin:/usr/local/sbin fi # ----- Abstraction (予定) alias :suspend="sudo /usr/sbin/pm-suspend" alias :hibernate="sudo /usr/sbin/pm-hibernate" if [[ -x /usr/bin/yum ]] ; then alias :package_update="sudo yum update" alias :package_install="sudo yum install" elif [[ -x /usr/bin/aptitude ]] ; then alias :package_update="sudo aptitude update; sudo aptitude upgrade" alias :package_install="sudo aptitude install" alias :package_list="" alias :package_search="sudo aptitude show" fi # ----- cygwin 固有設定 if [[ $OSTYPE = *cygwin* ]] ; then alias updatedb="updatedb --prunepaths='/cygdrive'" alias open='cmd /c start ' alias start='explorer . &' fi # ----- screen 使うことにしたよ if [[ -x /usr/bin/screen ]]; then function :title(){ # 1 : 普通の起動 # 2 : screen上 -> TERM = "screen" # 3 : ssh または screen上でのssh -> SSH_CLIENTが空でない # 4 : ssh上でのscreen -> SSH_CLIENTが空でない かつ STYが空でない # rootの場合**を付ける if [[ $USER == "root" ]]; then 1="*$1*" fi if [[ -n $SSH_CLIENT ]]; then if [[ -n $STY ]]; then # 4 : ssh上でのscreen else # 3 : ssh または screen上でのssh # マシン名を付け加える 1="$HOST:$1" fi elif [[ $TERM == "screen" ]]; then # 2 : screen上 -> TERM = "screen" else # 1 : 普通の起動 fi echo -n "^[k$1^[¥¥" } alias :split='screen -X split' alias :taillog='screen -t syslog sudo tail -f /var/log/syslog' alias :tailapachelog='screen -t syslog sudo tail -f /var/log/apache2/error.log' alias :top='screen -t top top' alias :displays='screen -X displays' # よく使いそうなやつ IsScreen=`expr $TERM : screen` if [[ $IsScreen != 0 ]]; then # ----- スクリーンだよ! preexec(){ # derived from http://nijino.homelinux.net/diary/200206.shtml#200206140 # and modified by kcrt 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]`) ;; ls) local -a wd; wd=(`builtin dirs`); :title $wd[0]; ;; cd) :title $cmd[2]; ;; sudo) :title "*$cmd[2]*"; ;; *) :title $cmd[1]; ;; 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 } else screen -r fi else echo "[kcrt] : screen not found." fi