Skip to content

Instantly share code, notes, and snippets.

@takahiro47
Last active December 24, 2015 14:09
Show Gist options
  • Save takahiro47/6810955 to your computer and use it in GitHub Desktop.
Save takahiro47/6810955 to your computer and use it in GitHub Desktop.
zsh / tmux / vim
if [ -f ~/.bashrc ]; then
. ~/.zshrc
fi
# Default configuration file for tmux-powerline.
# Modeline {
# vi: foldmarker={,} foldmethod=marker foldlevel=0 tabstop=4 filetype=sh
# }
# General {
# Show which segment fails and its exit code.
export TMUX_POWERLINE_DEBUG_MODE_ENABLED="false"
# Use patched font symbols.
export TMUX_POWERLINE_PATCHED_FONT_IN_USE="true"
# The theme to use.
export TMUX_POWERLINE_THEME="mytheme" # default
# Overlay dirctory to look for themes. There you can put your own themes outside the repo. Fallback will still be the "themes" directory in the repo.
export TMUX_POWERLINE_DIR_USER_THEMES=""
# Overlay dirctory to look for segments. There you can put your own segments outside the repo. Fallback will still be the "segments" directory in the repo.
export TMUX_POWERLINE_DIR_USER_SEGMENTS=""
# }
# battery.sh {
# How to display battery remaining. Can be {percentage, cute}.
export TMUX_POWERLINE_SEG_BATTERY_TYPE="percentage"
# How may hearts to show if cute indicators are used.
export TMUX_POWERLINE_SEG_BATTERY_NUM_HEARTS="5"
# }
# date.sh {
# date(1) format for the date. If you don't, for some reason, like ISO 8601 format you might want to have "%D" or "%m/%d/%Y".
export TMUX_POWERLINE_SEG_DATE_FORMAT="%F"
# }
# earthquake.sh {
# The data provider to use. Currently only "goo" is supported.
export TMUX_POWERLINE_SEG_EARTHQUAKE_DATA_PROVIDER="goo"
# How often to update the earthquake data in seconds.
# Note: This is not an early warning detector, use this
# to be informed about recent earthquake magnitudes in your
# area. If this is too often, goo may decide to ban you form
# their server
export TMUX_POWERLINE_SEG_EARTHQUAKE_UPDATE_PERIOD="600"
# Only display information when earthquakes are within this many minutes
export TMUX_POWERLINE_SEG_EARTHQUAKE_ALERT_TIME_WINDOW="60"
# Display time with this format
export TMUX_POWERLINE_SEG_EARTHQUAKE_TIME_FORMAT='(%H:%M)'
# Display only if magnitude is greater or equal to this number
export TMUX_POWERLINE_SEG_EARTHQUAKE_MIN_MAGNITUDE="3"
# }
# hostname.sh {
# Use short or long format for the hostname. Can be {"short, long"}.
export TMUX_POWERLINE_SEG_HOSTNAME_FORMAT="short"
# }
# mailcount.sh {
# Mailbox type to use. Can be any of {apple_mail, gmail, maildir, mbox, mailcheck}
export TMUX_POWERLINE_SEG_MAILCOUNT_MAILBOX_TYPE=""
## Gmail
# Enter your Gmail username here WITH OUT @gmail.com.( OR @domain)
export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_USERNAME=""
# Google password. Recomenned to use application specific password (https://accounts.google.com/b/0/IssuedAuthSubTokens) Leave this empty to get password from OS X keychain.
# For OSX users : MAKE SURE that you add a key to the keychain in the format as follows
# Keychain Item name : http://<value-you-fill-in-server-variable-below>
# Account name : <username-below>@<server-below>
# Password : Your password ( Once again, try to use 2 step-verification and application-specific password)
# See http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833 for more info.
export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_PASSWORD=""
# Domain name that will complete your email. For normal GMail users it probably is "gmail.com but can be "foo.tld" for Google Apps users.
export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER="gmail.com"
# How often in minutes to check for new mails.
export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL="5"
## Maildir
# Path to the maildir to check.
export TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX="/Users/takahiro/.mail/inbox/new"
## mbox
# Path to the mbox to check.
export TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX=""
## mailcheck
# Optional path to mailcheckrc
export TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC="/Users/takahiro/.mailcheckrc"
# }
# now_playing.sh {
# Music player to use. Can be any of {audacious, banshee, cmus, itunes, lastfm, mocp, mpd, mpd_simple, pithos, rdio, rhythmbox, spotify, spotify_wine}.
export TMUX_POWERLINE_SEG_NOW_PLAYING_MUSIC_PLAYER=""
# Maximum output length.
export TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN="40"
# How to handle too long strings. Can be {trim, roll}.
export TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD="trim"
# Charcters per second to roll if rolling trim method is used.
export TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED="2"
# Hostname for MPD server in the format "[password@]host"
export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST="localhost"
# Port the MPD server is running on.
export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT="6600"
# Song display format for mpd_simple. See mpc(1) for delimiters.
export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT="%artist% - %title%"
# Username for Last.fm if that music player is used.
export TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_USERNAME=""
# How often in seconds to update the data from last.fm.
export TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD="30"
# Fancy char to display before now playing track
export TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR="♫"
# }
# pwd.sh {
# Maximum length of output.
export TMUX_POWERLINE_SEG_PWD_MAX_LEN="40"
# }
# time.sh {
# date(1) format for the time. Americans might want to have "%I:%M %p".
export TMUX_POWERLINE_SEG_TIME_FORMAT="%H:%M"
# }
# weather.sh {
# The data provider to use. Currently only "yahoo" is supported.
export TMUX_POWERLINE_SEG_WEATHER_DATA_PROVIDER="yahoo"
# What unit to use. Can be any of {c,f,k}.
export TMUX_POWERLINE_SEG_WEATHER_UNIT="c"
# How often to update the weather in seconds.
export TMUX_POWERLINE_SEG_WEATHER_UPDATE_PERIOD="600"
# Name of GNU grep binary if in PATH, or path to it.
export TMUX_POWERLINE_SEG_WEATHER_GREP="grep"
# Your location. Find a code that works for you:
# 1. Go to Yahoo weather http://weather.yahoo.com/
# 2. Find the weather for you location
# 3. Copy the last numbers in that URL. e.g. "http://weather.yahoo.com/united-states/california/newport-beach-12796587/" has the numbers "12796587"
export TMUX_POWERLINE_SEG_WEATHER_LOCATION="26237038"
# }
set-option -g status on
set-option -g status-interval 2
set-option -g status-utf8 on
set-option -g status-justify "left"
set-option -g status-left-length 60
set-option -g status-right-length 90
set-option -g status-left "#(~/tmux-powerline/powerline.sh left)"
set-option -g status-right "#(~/tmux-powerline/powerline.sh right)"
set -g status-bg colour235
set-option -g status-left-length 100
set-option -g status-right-length 120
set-window-option -g window-status-current-format "#[fg=colour235, bg=colour27]⮀#[fg=colour255, bg=colour27] #I ⮁ #W #[fg=colour27, bg=colour235]⮀"
syntax enable
set background=dark
let g:solarized_termcolors=16
colorscheme solarized
set nocompatible
:set cmdheight=3
"検索パターンにおいて大文字と小文字を区別しない。(有効:ignorecase/無効:noignorecase)
set noignorecase
"検索パターンが大文字を含んでいたらオプション 'ignorecase' を上書きする。(有効:smartcase/無効:nosmartcase)
set smartcase
"ファイル内の <Tab> が対応する空白の数。
set tabstop=4
"<Tab> の挿入や <BS> の使用等の編集操作をするときに、<Tab> が対応する空白の数。
set softtabstop=4
"インデントの各段階に使われる空白の数。
set shiftwidth=4
"Insertモードで <Tab> を挿入するとき、代わりに適切な数の空白を使う。(有効:expandtab/無効:noexpandtab)
set noexpandtab
"入力されているテキストの最大幅。行がそれより長くなると、この幅を超えないように空白の後で改行される。(値を 0 に設定で無効)
set textwidth=0
"新しい行を開始したとき(Insertモードで <CR> を打ち込むか、コマンド "o"や "O" を使ったとき)、新しい行のインデントを現在行と同じくする。(有効:autoindent/無効:noautoindent)
set autoindent
"オンのときは、ウィンドウの幅より長い行は折り返され、次の行に続けて表示される。(有効:wrap/無効:nowrap)
set wrap
"検索がファイル末尾まで進んだら、ファイル先頭から再び検索する。(有効:wrapscan/無効:nowrapscan)
set wrapscan
"オンのとき、コマンドライン補完が拡張モードで行われる。(有効:wildmenu/無効:nowildmenu)
set wildmenu
"閉じ括弧が入力されたとき、対応する開き括弧にわずかの間ジャンプする。(有効:showmatch/無効:noshowmatch)
set showmatch
"毎行の前に行番号を表示する。(有効:number/無効:nonumber)
set number
"カーソルが何行目の何列目に置かれているかを表示する。(有効:ruler/無効:noruler)
set ruler
"タブ文字を CTRL-I で表示し、行末に $ で表示する。(有効:list/無効:nolist)
set list
"Listモード(訳注: オプション 'list' がオンのとき)に使われる文字を設定する。
set listchars=tab:>-,extends:<,trail:-,eol:<
"最下ウィンドウにいつステータス行が表示されるかを設定する。
" 0: 全く表示しない
" 1: ウィンドウの数が2以上のときのみ表示
" 2: 常に表示
set laststatus=2
"コマンド (の一部) を画面の最下行に表示する。(有効:showcmd/無効:noshowcmd)
set showcmd
"ファイルを上書きする前にバックアップを作る。書き込みが成功してもバックアップはそのまま取っておく。(有効:backup/無効:nobackup)
set nobackup
"ファイルの上書きの前にバックアップを作る。"オプション 'backup' がオンでない限り、バックアップは上書きに成功した後削除される。(有効:writebackup/無効:nowritebackup)
set writebackup
# -*- sh -*-
# パスの設定
## 重複したパスを登録しない。
typeset -U path
## (N-/): 存在しないディレクトリは登録しない。
## パス(...): ...という条件にマッチするパスのみ残す。
## N: NULL_GLOBオプションを設定。
## globがマッチしなかったり存在しないパスを無視する。
## -: シンボリックリンク先のパスを評価。
## /: ディレクトリのみ残す。
path=(# システム用
/bin(N-/)
# 自分用(--prefix=$HOME/localでインストールしたもの)
$HOME/local/bin(N-/)
# 自分用(gem install --user-installでインストールしたもの)
## 2012-01-07
$HOME/.gem/ruby/*/bin(N-/)
# rbenv用
## 2012-02-21
$HOME/.rbenv/bin(N-/)
# Debian GNU/Linux用
/var/lib/gems/*/bin(N-/)
# MacPorts用
/opt/local/bin(N-/)
# Solaris用
/opt/csw/bin(N-/)
/usr/sfw/bin(N-/)
/usr/ccs/bin(N-/)
# Cygwin用
/cygdrive/c/meadow/bin(N-/)
# システム用
/usr/local/bin(N-/)
/usr/bin(N-/)
/usr/games(N-/))
# sudo時のパスの設定
## -x: export SUDO_PATHも一緒に行う。
## -T: SUDO_PATHとsudo_pathを連動する。
typeset -xT SUDO_PATH sudo_path
## 重複したパスを登録しない。
typeset -U sudo_path
## (N-/): 存在しないディレクトリは登録しない。
## パス(...): ...という条件にマッチするパスのみ残す。
## N: NULL_GLOBオプションを設定。
## globがマッチしなかったり存在しないパスを無視する。
## -: シンボリックリンク先のパスを評価。
## /: ディレクトリのみ残す。
sudo_path=({,/usr/pkg,/usr/local,/usr}/sbin(N-/))
if [ $(id -u) -eq 0 ]; then
# rootの場合はsudo用のパスもPATHに加える。
path=($sudo_path $path)
else
# 一般ユーザーの場合はsudo時にsudo用のパスをPATHに加える。
alias sudo="sudo env PATH=\"$SUDO_PATH:$PATH\""
fi
# man用パスの設定
## 重複したパスを登録しない。
typeset -U manpath
## (N-/) 存在しないディレクトリは登録しない。
## パス(...): ...という条件にマッチするパスのみ残す。
## N: NULL_GLOBオプションを設定。
## globがマッチしなかったり存在しないパスを無視する。
## -: シンボリックリンク先のパスを評価。
## /: ディレクトリのみ残す。
manpath=(# 自分用
$HOME/local/share/man(N-/)
# MacPorts用
/opt/local/share/man(N-/)
# Solaris用
/opt/csw/share/man(N-/)
/usr/sfw/share/man(N-/)
# システム用
/usr/local/share/man(N-/)
/usr/share/man(N-/))
# Rubyの設定
## ライブラリのロードパス
### -x: export RUBYLIBも一緒に行う。
### -T: RUBYLIBとruby_pathを連動する。
typeset -xT RUBYLIB ruby_path
### 重複したパスを登録しない。
typeset -U ruby_path
### パスを設定
ruby_path=(# カレントディレクトリのライブラリを優先する
./lib)
# Pythonの設定
## ライブラリのロードパス
### -x: export PYTHONPATHも一緒に行う。
### -T: PYTHONPATHとpython_pathを連動する。
typeset -xT PYTHONPATH pyhon_path
### 重複したパスを登録しない。
typeset -U python_path
### パスを設定。
python_path=(# カレントディレクトリのライブラリを優先する
./lib)
# pkg-configの設定
## .pcのロードパス
### -x: export PKG_CONFIG_PATHも一緒に行う。
### -T: PKG_CONFIG_PATHとpkg_config_pathを連動する。
typeset -xT PKG_CONFIG_PATH pkg_config_path
### 重複したパスを登録しない。
typeset -U pkg_config_path
### パスを設定。
### (N-/) 存在しないディレクトリは登録しない。
### パス(...): ...という条件にマッチするパスのみ残す。
### N: NULL_GLOBオプションを設定。
### globがマッチしなかったり存在しないパスを無視する。
### -: シンボリックリンク先のパスを評価。
### /: ディレクトリのみ残す。
pkg_config_path=(# 自分用
$HOME/local/lib/pkgconfig(N-/)
# MacPorts用
/opt/local/lib/pkgconfig(N-/))
# ページャの設定
if type lv > /dev/null 2>&1; then
## lvを優先する。
export PAGER="lv"
else
## lvがなかったらlessを使う。
export PAGER="less"
fi
# lvの設定
## -c: ANSIエスケープシーケンスの色付けなどを有効にする。
## -l: 1行が長くと折り返されていても1行として扱う。
## (コピーしたときに余計な改行を入れない。)
export LV="-c -l"
if [ "$PAGER" != "lv" ]; then
## lvがなくてもlvでページャーを起動する。
alias lv="$PAGER"
fi
# lessの設定
## -R: ANSIエスケープシーケンスのみ素通しする。
## 2012-09-04
export LESS="-R"
# grepの設定
## GNU grepがあったら優先して使う。
if type ggrep > /dev/null 2>&1; then
alias grep=ggrep
fi
## grepのバージョンを検出。
grep_version="$(grep --version | head -n 1 | sed -e 's/^[^0-9.]*\([0-9.]*\)[^0-9.]*$/\1/')"
## デフォルトオプションの設定
export GREP_OPTIONS
### バイナリファイルにはマッチさせない。
GREP_OPTIONS="--binary-files=without-match"
case "$grep_version" in
1.*|2.[0-4].*|2.5.[0-3])
;;
*)
### grep 2.5.4以降のみの設定
### grep対象としてディレクトリを指定したらディレクトリ内を再帰的にgrepする。
GREP_OPTIONS="--directories=recurse $GREP_OPTIONS"
;;
esac
### 拡張子が.tmpのファイルは無視する。
GREP_OPTIONS="--exclude=\*.tmp $GREP_OPTIONS"
## 管理用ディレクトリを無視する。
if grep --help 2>&1 | grep -q -- --exclude-dir; then
GREP_OPTIONS="--exclude-dir=.svn $GREP_OPTIONS"
GREP_OPTIONS="--exclude-dir=.git $GREP_OPTIONS"
GREP_OPTIONS="--exclude-dir=.deps $GREP_OPTIONS"
GREP_OPTIONS="--exclude-dir=.libs $GREP_OPTIONS"
fi
### 可能なら色を付ける。
if grep --help 2>&1 | grep -q -- --color; then
GREP_OPTIONS="--color=auto $GREP_OPTIONS"
fi
# sedの設定
## GNU sedがあったら優先して使う。
## 2012-03-04
if type gsed > /dev/null 2>&1; then
alias sed=gsed
fi
# エディタの設定
## vimを使う。
export EDITOR=vim
## vimがなくてもvimでviを起動する。
if ! type vim > /dev/null 2>&1; then
alias vim=vi
fi
# メールアドレスの設定
## ~/.zsh.d/email → ~/.emailの順に探して最初に見つかったファイルから読み込む。
## (N-.): 存在しないファイルは登録しない。
## パス(...): ...という条件にマッチするパスのみ残す。
## N: NULL_GLOBオプションを設定。
## globがマッチしなかったり存在しないパスを無視する。
## -: シンボリックリンク先のパスを評価。
## .: 通常のファイルのみ残す。
email_files=(~/.zsh.d/email(N-.)
~/.email(N-.))
for email_file in ${email_files}; do
export EMAIL=$(cat "$email_file")
break
done
# -*- sh -*-
## 色とエンコードの設定
#-------------------------------------------------------------------------------------
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,utf-8,ucs2le,ucs-2
# パスの設定
#-------------------------------------------------------------------------------------
## GCCのパスを指定
export CC="/usr/bin/gcc"
## パスの初期化(brew用に)
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin
## rbenv
export PATH="$PATH:$HOME/.rbenv/bin"
export PATH="$PATH:$HOME/.rbenv/shims"
eval "$(rbenv init -)"
## mysql
export PATH=$PATH:"/usr/local/mysql/bin"
## php pear
export PATH=$PATH:"$HOME/pear/bin"
## node npm & coffee
export PATH=$PATH:"$HOME/node_modules/.bin"
export PATH=$PATH:/usr/local/share/npm/bin
# エイリアス(ローカルサーバ用)
#-------------------------------------------------------------------------------------
alias server="cd /Library/Server/Web/Data/Sites/Default/"
# takahiro@localhost
alias takahiro="cd /Library/Server/Web/Data/Sites/Default/takahiro/"
# stucon
alias stucon="cd /Library/Server/Web/Data/Sites/Default/takahiro/stucon"
# tanabata @localhost
alias tanabata="cd /Library/Server/Web/Data/Sites/Default/tanabata/"
# t11593tt @localhost
alias t11593tt="cd /Library/Server/Web/Data/Sites/Default/t11593tt/public_html/"
# node current work
alias nodec="cd Desktop/Codes/nodejs/nodejs_tutorials/twitter_client/; node web"
# エイリアス(その他オリジナル)
#-------------------------------------------------------------------------------------
# Compass
alias watch="compass watch"
# エイリアス(ショートカット)
#-------------------------------------------------------------------------------------
# Clear
alias c="clear"
## Exit terminal
alias x="exit"
## 全履歴の一覧を出力
function history-all { history -E 1 }
## 削除コマンドをゴミ箱に移動へ変更
function rm() {
if [ -d ~/.Trash ]; then
local DATE=`date "+%y%m%d-%H%M%S"`
mkdir ~/.Trash/$DATE
for i in $@; do
if [ -e $i ]; then
mv $i ~/.Trash/$DATE/
fi
done
else
/bin/rm $@
fi
}
## ページャーを使いやすく
### grep -r def *.rb L -> grep -r def *.rb |& lv
alias -g L="|& $PAGER"
## grepを使いやすく
alias -g G='| grep'
## おまけ
alias -g H='| head'
alias -g T='| tail'
alias -g S='| sed'
## 完全削除
alias rr="command rm -rf"
## ファイル操作を確認
# 削除時に警告(yで削除, ただしrm -fとした場合は警告なし)
alias rm="rm -i"
# コピーに警告
alias cp="cp -i"
# 移動時に警告
alias mv="mv -i"
## pushd/popd (poで1つ前のディレクトリへ)
alias pd="pushd"
alias po="popd"
alias flush="dirs -c"
## シェルのリダイレクト先ファイルを上書きしようとすると警告して中止
set -o noclobber
## ls/ps
### ls: できるだけGNU lsを使用
### ps: 自分関連のプロセスのみ表示
case $(uname) in
*BSD|Darwin)
if [ -x "$(which gnuls)" ]; then
alias ls="gnuls"
alias la="ls -lhAF --color=auto"
else
alias la="ls -lhAFG"
fi
alias ps="ps -fU$(whoami)"
;;
SunOS)
if [ -x "`which gls`" ]; then
alias ls="gls"
alias la="ls -lhAF --color=auto"
else
alias la="ls -lhAF"
fi
alias ps="ps -fl -u$(/usr/xpg4/bin/id -un)"
;;
*)
alias la="ls -lhAF --color=auto"
alias ps="ps -fU$(whoami) --forest"
;;
esac
## ls に色を付ける
alias ls='ls -G'
## grep に色を付ける
export GREP_OPTIONS='--color=auto'
## Emacs
alias e="emacs &"
### -nw: ターミナル内でEmacsを起動
alias enw="emacs -nw"
# キーバインド
#-------------------------------------------------------------------------------------
## Emacsキーバインドを使う。
bindkey -e
# ディレクトリ移動
#-------------------------------------------------------------------------------------
## ディレクトリ名だけでcd
setopt auto_cd
## cdで移動してもpushdと同じようにディレクトリスタックに追加
setopt auto_pushd
## カレントディレクトリ中に指定されたディレクトリが見つからなかった場合に移動先を検索するリスト
cdpath=(~)
## ディレクトリが変わったらディレクトリスタックを表示
chpwd_functions=($chpwd_functions dirs)
# ヒストリ
#-------------------------------------------------------------------------------------
## ヒストリを保存するファイル
HISTFILE=~/.zsh_history
## メモリ上のヒストリ数
HISTSIZE=10000000
## 保存するヒストリ数
SAVEHIST=$HISTSIZE
## ヒストリファイルにコマンドラインだけではなく実行時刻と実行時間も保存
setopt extended_history
## 同じコマンドラインを連続で実行した場合はヒストリに登録しない
setopt hist_ignore_dups
## スペースで始まるコマンドラインをヒストリに追加しない
setopt hist_ignore_space
## すぐにヒストリファイルに追記
setopt inc_append_history
## zshプロセス間でヒストリを共有
setopt share_history
## C-sでのヒストリ検索が潰されてしまうため、出力停止・開始用にC-s/C-qを使わない。
setopt no_flow_control
# プロンプト
#-------------------------------------------------------------------------------------
## PROMPT内で変数展開・コマンド置換・算術演算を実行する
setopt prompt_subst
## PROMPT内で「%」文字から始まる置換機能を有効にする
setopt prompt_percent
## コピペしやすいようにコマンド実行後は右プロンプトを消す
setopt transient_rprompt
## 256色生成用便利関数
#-------------------------------------------------------------------------------------
### red: 0-5
### green: 0-5
### blue: 0-5
color256() {
local red=$1; shift
local green=$2; shift
local blue=$3; shift
echo -n $[$red * 36 + $green * 6 + $blue + 16]
}
fg256() {
echo -n $'\e[38;5;'$(color256 "$@")"m"
}
bg256() {
echo -n $'\e[48;5;'$(color256 "$@")"m"
}
# ジョブ
#-------------------------------------------------------------------------------------
## jobsでプロセスIDも出力する。
setopt long_list_jobs
# 実行時間
#-------------------------------------------------------------------------------------
## 実行したプロセスの消費時間が3秒以上かかったら
## 自動的に消費時間の統計情報を表示する。
REPORTTIME=3
# ログイン・ログアウト
#-------------------------------------------------------------------------------------
## 全てのユーザのログイン・ログアウトを監視
watch="all"
## ログイン時にはすぐに表示
log
## ^Dでログアウトしないように
setopt ignore_eof
# 単語
#-------------------------------------------------------------------------------------
## 「/」も単語区切りとみなす
WORDCHARS=${WORDCHARS:s,/,,}
## 「|」も単語区切りとみなす
WORDCHARS="${WORDCHARS}|"
## プロンプトの作成
### 以下のように表示する
### -(user@debian)-(0)-<2011/09/01 00:54>------------------------------[/home/user]-
### -[84](0)% [~]
#-------------------------------------------------------------------------------------
## バージョン管理システムの情報も表示する
autoload -Uz vcs_info
zstyle ':vcs_info:*' formats \
'(%{%F{white}%K{green}%}%s%{%f%k%})-[%{%F{white}%K{blue}%}%b%{%f%k%}]'
zstyle ':vcs_info:*' actionformats \
'(%{%F{white}%K{green}%}%s%{%f%k%})-[%{%F{white}%K{blue}%}%b%{%f%k%}|%{%F{white}%K{red}%}%a%{%f%k%}]'
### プロンプトバーの左側
### %{%B%}...%{%b%}: 「...」を太字にする。
### %{%F{cyan}%}...%{%f%}: 「...」をシアン色の文字にする。
### %n: ユーザ名
### %m: ホスト名(完全なホスト名ではなくて短いホスト名)
### %{%B%F{white}%(?.%K{green}.%K{red})%}%?%{%f%k%b%}:
### 最後に実行したコマンドが正常終了していれば
### 太字で白文字で緑背景にして異常終了していれば
### 太字で白文字で赤背景にする。
### %{%F{white}%}: 白文字にする。
### %(x.true-text.false-text): xが真のときはtrue-textになり
### 偽のときはfalse-textになる。
### ?: 最後に実行したコマンドの終了ステータスが0のときに真になる。
### %K{green}: 緑景色にする。
### %K{red}: 赤景色を赤にする。
### %?: 最後に実行したコマンドの終了ステータス
### %{%k%}: 背景色を元に戻す。
### %{%f%}: 文字の色を元に戻す。
### %{%b%}: 太字を元に戻す。
### %D{%Y/%m/%d %H:%M}: 日付。「年/月/日 時:分」というフォーマット。
prompt_bar_left_self="(%{%B%}%n%{%b%}%{%F{cyan}%}@%{%f%}%{%B%}%m%{%b%})"
prompt_bar_left_status="(%{%B%F{white}%(?.%K{green}.%K{red})%}%?%{%k%f%b%})"
prompt_bar_left_date="<%{%B%}%D{%Y/%m/%d %H:%M}%{%b%}>"
prompt_bar_left="-${prompt_bar_left_self}-${prompt_bar_left_status}-${prompt_bar_left_date}-"
### プロンプトバーの右側
### %{%B%K{magenta}%F{white}%}...%{%f%k%b%}:
### 「...」を太字のマゼンタ背景の白文字にする。
### %d: カレントディレクトリのフルパス(省略しない)
prompt_bar_right="-[%{%B%K{magenta}%F{white}%}%d%{%f%k%b%}]-"
### 2行目左にでるプロンプト。
### %h: ヒストリ数。
### %(1j,(%j),): 実行中のジョブ数が1つ以上ある場合だけ「(%j)」を表示。
### %j: 実行中のジョブ数。
### %{%B%}...%{%b%}: 「...」を太字にする。
### %#: 一般ユーザなら「%」、rootユーザなら「#」になる。
prompt_left="-[%h]%(1j,(%j),)%{%B%}%#%{%b%} "
## プロンプトフォーマットを展開した後の文字数を返す。
## 日本語未対応。
count_prompt_characters() {
# print:
# -P: プロンプトフォーマットを展開する。
# -n: 改行をつけない。
# sed:
# -e $'s/\e\[[0-9;]*m//g': ANSIエスケープシーケンスを削除。
# wc:
# -c: 文字数を出力する。
# sed:
# -e 's/ //g': *BSDやMac OS Xのwcは数字の前に空白を出力するので削除する。
print -n -P -- "$1" | sed -e $'s/\e\[[0-9;]*m//g' | wc -m | sed -e 's/ //g'
}
## プロンプトを更新
update_prompt() {
# プロンプトバーの左側の文字数を数える。
# 左側では最後に実行したコマンドの終了ステータスを使って
# いるのでこれは一番最初に実行しなければいけない。そうし
# ないと、最後に実行したコマンドの終了ステータスが消えて
# しまう。
local bar_left_length=$(count_prompt_characters "$prompt_bar_left")
# プロンプトバーに使える残り文字を計算する。
# $COLUMNSにはターミナルの横幅が入っている。
local bar_rest_length=$[COLUMNS - bar_left_length]
local bar_left="$prompt_bar_left"
# パスに展開される「%d」を削除。
local bar_right_without_path="${prompt_bar_right:s/%d//}"
# 「%d」を抜いた文字数を計算する。
local bar_right_without_path_length=$(count_prompt_characters "$bar_right_without_path")
# パスの最大長を計算する。
# $[...]: 「...」を算術演算した結果で展開する。
local max_path_length=$[bar_rest_length - bar_right_without_path_length]
# パスに展開される「%d」に最大文字数制限をつける。
# %d -> %(C,%${max_path_length}<...<%d%<<,)
# %(x,true-text,false-text):
# xが真のときはtrue-textになり偽のときはfalse-textになる。
# ここでは、「%N<...<%d%<<」の効果をこの範囲だけに限定させる
# ために用いているだけなので、xは必ず真になる条件を指定している。
# C: 現在の絶対パスが/以下にあると真。なので必ず真になる。
# %${max_path_length}<...<%d%<<:
# 「%d」が「${max_path_length}」カラムより長かったら、
# 長い分を削除して「...」にする。最終的に「...」も含めて
# 「${max_path_length}」カラムより長くなることはない。
bar_right=${prompt_bar_right:s/%d/%(C,%${max_path_length}<...<%d%<<,)/}
# 「${bar_rest_length}」文字分の「-」を作っている。
# どうせ後で切り詰めるので十分に長い文字列を作っているだけ。
# 文字数はざっくり。
local separator="${(l:${bar_rest_length}::-:)}"
# プロンプトバー全体を「${bar_rest_length}」カラム分にする。
# %${bar_rest_length}<<...%<<:
# 「...」を最大で「${bar_rest_length}」カラムにする。
bar_right="%${bar_rest_length}<<${separator}${bar_right}%<<"
# プロンプトバーと左プロンプトを設定
# "${bar_left}${bar_right}": プロンプトバー
# $'\n': 改行
# "${prompt_left}": 2行目左のプロンプト
PROMPT="${bar_left}${bar_right}"$'\n'"${prompt_left}"
# 右プロンプト
# %{%B%F{white}%K{green}}...%{%k%f%b%}:
# 「...」を太字で緑背景の白文字にする。
# %~: カレントディレクトリのフルパス(可能なら「~」で省略する)
RPROMPT="[%{%B%F{white}%K{magenta}%}%~%{%k%f%b%}]"
case "$TERM_PROGRAM" in
Apple_Terminal)
# Mac OS Xのターミナルでは$COLUMNSに右余白が含まれていないので
# 右プロンプトに「-」を追加して調整。
## 2011-09-05
RPROMPT="${RPROMPT}-"
;;
esac
# バージョン管理システムの情報を取得する。
LANG=C vcs_info >&/dev/null
# バージョン管理システムの情報があったら右プロンプトに表示する。
if [ -n "$vcs_info_msg_0_" ]; then
RPROMPT="${vcs_info_msg_0_}-${RPROMPT}"
fi
}
## コマンド実行前に呼び出されるフック。
precmd_functions=($precmd_functions update_prompt)
# 補完
#-------------------------------------------------------------------------------------
## 初期化
autoload -U compinit
compinit
## 補完方法毎にグループ化
### 補完方法の表示方法
### %B...%b: 「...」を太字に
### %d: 補完方法のラベル
zstyle ':completion:*' format '%B%d%b'
zstyle ':completion:*' group-name ''
## 補完侯補をメニューから選択
### select=2: 補完候補を一覧から選択
### ただし、補完候補が2つ以上なければすぐに補完
zstyle ':completion:*:default' menu select=2
## 補完候補に色を付ける
### "": 空文字列はデフォルト値を使うという意味を表す
zstyle ':completion:*:default' list-colors ""
## 補完候補がなければより曖昧に候補を探す
### m:{a-z}={A-Z}: 小文字を大文字に変えたものでも補完
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
## 補完方法の設定。指定した順番に実行
### _oldlist 前回の補完結果を再利用
### _complete: 補完す
### _match: globを展開しないで候補の一覧から補完
### _ignored: 補完候補にださないと指定したものも補完候補
### _approximate: 似ている補完候補も補完候補
### _prefix: カーソル以降を無視してカーソル位置までで補完
zstyle ':completion:*' completer _oldlist _complete _match _ignored _approximate _prefix
## 補完候補をキャッシュ
zstyle ':completion:*' use-cache yes
## 詳細な情報を使用
zstyle ':completion:*' verbose yes
## sudo時にはsudo用のパスも使用
zstyle ':completion:sudo:*' environ PATH="$SUDO_PATH:$PATH"
## カーソル位置で補完
setopt complete_in_word
## globを展開しないで候補の一覧から補完
setopt glob_complete
## 補完時にヒストリを自動的に展開
setopt hist_expand
## 補完候補がないときなどにビープ音を鳴らさない
setopt no_beep
## 辞書順ではなく数字順に並べる
setopt numeric_glob_sort
# 展開
#-------------------------------------------------------------------------------------
## --prefix=~/localというように「=」の後でも「~」や「=コマンド」などのファイル名展開を実行
setopt magic_equal_subst
## 拡張globを有効に (glob中で「(#...)」という書式で指定)
setopt extended_glob
## globでパスを生成したときに、パスがディレクトリだったら最後に「/」を付加
setopt mark_dirs
## カスタムaliasの設定
#-------------------------------------------------------------------------------------
### ~/.zsh.d/zshalias → ~/.zshaliasの順に探して
### 最初に見つかったファイルを読み込む。
### (N-.): 存在しないファイルは登録しない。
### パス(...): ...という条件にマッチするパスのみ残す。
### N: NULL_GLOBオプションを設定。
### globがマッチしなかったり存在しないパスを無視する。
### -: シンボリックリンク先のパスを評価。
### .: 通常のファイルのみ残す。
### 2011-11-06
alais_files=(~/.zsh.d/zshalias(N-.) ~/.zshalias(N-.))
for alias_file in ${alias_files}; do
source "${alias_file}"
break
done
# ウィンドウタイトル
#-------------------------------------------------------------------------------------
## 実行中のコマンドとユーザ名とホスト名とカレントディレクトリを表示
update_title() {
local command_line=
typeset -a command_line
command_line=${(z)2}
local command=
if [ ${(t)command_line} = "array-local" ]; then
command="$command_line[1]"
else
command="$2"
fi
print -n -P "\e]2;"
echo -n "(${command})"
print -n -P " %n@%m:%~\a"
}
## X環境上でだけウィンドウタイトルを変更
if [ -n "$DISPLAY" ]; then
preexec_functions=($preexec_functions update_title)
fi
# tmux
#-------------------------------------------------------------------------------------
PS1="$PS1"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'
if [ -f ~/.bashrc ]; then
. ~/.zshrc
fi
source ~/.zsh.d/zshenv
source ~/.zsh.d/zshrc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment