読者です 読者をやめる 読者になる 読者になる

( ꒪⌓꒪) ゆるよろ日記

( ゚∀゚)o彡°オパーイ!オパーイ! ( ;゚皿゚)ノシΣ フィンギィィーーッ!!!

Mac OSXでのvim環境整理。.vimrcやらオヌヌメPlug inやらまとめ。

vim mac

f:id:yuroyoro:20101006140122p:image:left:w200

「そんな.vimrcで大丈夫か?」

f:id:yuroyoro:20101006140123p:image:left:w200


「一番いい設定をたのむ」


ってことで、新しくMacbook Pro 15inch買ってSSDで世界が変わったゆろよろですこんにちうぉー。


で、pathogen.vimというvimのplugin管理を導入して、.vimrcやら見直したりしてみたんで色々と紹介してみようと思ったんですわ。

まぁ、この記事見たのがきっかけです。


vimプラグインでよりよいコーディングを | tech.kayac.com - KAYAC engineers’ blog


もっとVim戦闘力を上げたいので、誰かvim scriptのハンズオンとかやって俺にvim scriptの書き方を教えてください……!

MacVim-KaoriYaのinstall

まずは、vim本体をMacVim-KaoriYaにします。

MacVimに対して、香り屋パッチの統合、ローカライズ、MacVim固有の設定、日本語文字コード自動判別、必要なshared library、Perl/Python/Rubyのdynamic loading、Objective-C対応ctags、などを追加しています。インストールしてすぐ使えるのが目標です。もちろんTerminal.app、iTerm.app上で動くコンソール版Vimとしても使用できます。

http://code.google.com/p/macvim-kaoriya/
macvim-kaoriya - MacVim KaoriYa - Google Project Hosting


ダウンロードしてきて、MacVim.appをApplicationsディレクトリに放り込みましょう。俺は、gVimはあまり使わずにTerminal.appからvimを起動する派なので、.bashrcや.zshrcなどで環境変数EDITORとaliasに設定をしておきます。

export EDITOR=/Applications/MacVim.app/Contents/MacOS/Vim
alias vi='env LANG=ja_JP.UTF-8 /Applications/MacVim.app/Contents/MacOS/Vim "$@"'
alias vim='env LANG=ja_JP.UTF-8 /Applications/MacVim.app/Contents/MacOS/Vim "$@"'
Terminal.appでのANSI Colorをカスタマイズする

まぁこれはお好みなんですが、Terminal.appでのANSI Colorをカスタマイズするために、SIMBLと、SIMBL PluginのTerminalColorsを入れておきます。


TerminalColorsは、64bit版をこちらからダウンロードして、~/Library/Application Support/SIMBL/Plugins/に放り込めばオケです。


このように、色を好きに変えることができます。俺は、デフォルトはちょっと原色キツイのでちょっと薄めの色にしてますお。

f:id:yuroyoro:20101104223734p:image

.vimrcについて

じゃあ、肝心のvimの設定に入ります。まぁ俺の.vimrcは.vimrc at master from yuroyoro/dotfiles - GitHubで公開していて、コメントもできるだけ書いてあるのでまぁ参考にして頂きたいわけですが、その中でも特にオヌヌメの設定を紹介しますぁ。

カーソル行のハイライト

ふつーにset cursorlineと設定すると、ウィンドウを分割した場合にフォーカスが当たっていないウィンドウもハイライトされてしまって見にくいので、カレントウィンドウのみに罫線を引くように設定します。

" カーソル行をハイライト
set cursorline
" カレントウィンドウにのみ罫線を引く
augroup cch
autocmd! cch
autocmd WinLeave * set nocursorline
autocmd WinEnter,BufRead * set cursorline
augroup END

:hi clear CursorLine
:hi CursorLine gui=underline
highlight CursorLine ctermbg=black guibg=black
こんなように、右側のみに罫線がでるようになります。わかりにくいかもしれませんが、右のウィンドウに罫線が引かれてます。

f:id:yuroyoro:20101104223735p:image


検索ハイライトの消去

/hogeなどで検索したキーワードのハイライトを、ESC2回押しでクリアするようにします。

"Escの2回押しでハイライト消去
nmap ;nohlsearch
.vimrcを"nnoremap"で検索したときで、

f:id:yuroyoro:20101104223736p:image

ここでESC2回押すとクリアされますお。

f:id:yuroyoro:20101104223737p:image

helpを素早くひく

でカーソル下のキーワードでヘルプを引きます。ふつーはなのでしょうが、後述するウィンドウの移動でを使っているので、俺はにしてます。

" Ctrl-iでヘルプ
nnoremap :help
" カーソル下のキーワードをヘルプでひく
nnoremap :help
保存時の空白除去

「私は行末のスペースを許さないっ!!」ので、buffer保存時に行末のスペースを削除するようにしてます。あとタブではなくスペース派なので、タブもスペースに変換してます。ftpluginでfiletype毎に設定するのがいんじゃないでしょうか?

" 保存時に行末の空白を除去する
autocmd BufWritePre * :%s/\s\+$//ge
" 保存時にtabをスペースに変換する
autocmd BufWritePre * :%s/\t/ /ge
コマンド入力を素早く

これは';'キーと':'キーを入れ替えることで、素早くコマンドモードに入れるようにしています。特に、US配列だと':'を入力するのにShiftキーが必要になるため、俺に取っては必須の設定です。この設定にしてから生産性が向上した気がする……。

" ;でコマンド入力( ;と:を入れ替)
noremap ; :
noremap : ;
ウィンドウ移動を楽に

俺はわりとウィンドウを分割する派で、ウィンドウ間をよく移動するので、CTRL-hjklでウィンドウを移動できるようにしてまlとか入力しにくいので。

" CTRL-hjklでウィンドウ移動
nnoremap ;j
nnoremap ;j
nnoremap ;j
nnoremap ;j
vim plugin色々

では、入れてるvim pluginを紹介します。一覧はこのエントリの最後に貼っておきます。ここでは、特にオヌヌメ度が高くて無くては生きていけないものを紹介します。

pathogen.vim

色々なpluginをぶち込んでいくと、.vimディレクトリがカオスになってしまいますね。vimプラグインでよりよいコーディングを | tech.kayac.com - KAYAC engineers’ blogにも紹介されていますが、pathogen.vimを導入することで、bundleディレクトリ以下にplugin毎にディレクトリを分けて放り込んで置けるようになり、管理が楽になります。

f:id:yuroyoro:20101104223738p:image


このように、autoload/doc/ftplugin/ftdetect/plugin/syntaxなどのディレクトリにそれぞれのpluginのファイルが点在している状況を、pathogen.vim を導入することでbundleディレクトリ以下にplugin毎にフォルダを分けて管理してくれるようになってすっきりします。さらに、Githubで公開されているpluginならgitのsubmoduleとして管理できるってわけです(参考 : Tips – Using git submodule keep your vim plugin up-to-date | DIG RUBY )

f:id:yuroyoro:20101104223739p:image


今回vim環境を見直したのは、このpluginを導入しようと思ったからです。


.vimrcで、pathogen#runtime_append_all_bundles()を呼び出せば、bundleディレクトリ以下の各autoload/doc/pluginなどをvimのruntime pathに追加してくれます。


call pathogen#runtime_append_all_bundles()

なお、各プラグインのftdetectをこのpathogenで読み込ませるには、.vimrcで、一度filetype offにした後にpathogen#runtime_append_all_bundles()を呼び出すようにしなければなりません。

" pathogenでftdetectなどをloadさせるために一度ファイルタイプ判定をoff
filetype off
" pathogen.vimによってbundle配下のpluginをpathに加える
call pathogen#runtime_append_all_bundles()
call pathogen#helptags()
set helpfile=$VIMRUNTIME/doc/help.txt
" ファイルタイプ判定をon
filetype plugin on

documentにも書いてあります。

Note that you need to invoke the pathogen functions before invoking "filetype plugin indent on" if you want it to load ftdetect files. On Debian (and probably other distros), the system vimrc does this early on, so you actually need to "filetype off" before "filetype plugin indent on" to force reloading.

http://www.vim.org/scripts/script.php?script_id=2332
surround.vim

surround.vimvim のテキストオブジェクトに対する操作を拡張するプラグインです。テキストオブジェクトとは、以下のような()や""の中身やそれ自身を含むもので、surround.vimを使うと、"hoge"のような"で囲まれている部分を'に置き換えたりできます。


例えば、以下のような'grep -RUIn'をダブルクォートで囲むように置き換えたい場合は、

f:id:yuroyoro:20101104223740p:image

''の中にカーソルを置いた状態で、cs'"とキー入力すると、このように置き換わります。

f:id:yuroyoro:20101104223741p:image

()やfoo barのようなタグの中まで、テキストオブジェクトが使えるところで活用できます。便利。俺はこのようにキーマップを登録してVisual modeで選択した箇所でsurround.vimを呼び出せるようにしています。

"------------------------------------
" surround.vim
"------------------------------------
" s, ssで選択範囲を指定文字でくくる
nmap s Ysurround
nmap ss Yssurround
NERD_commenter.vim

ビジュアルモードや行単位でコメントアウトしたりコメントをハズしたりできます。

例えば、このようにVisual modeで選択した状態で、

f:id:yuroyoro:20101104223742p:image

cすると、

f:id:yuroyoro:20101104223743p:image

このようにコメントアウトできます。もう一度選択して cするとコメント解除です。色々なファイルタイプに対応していて、htmlであればこのようになります。

f:id:yuroyoro:20101104223745p:image

f:id:yuroyoro:20101104224755p:image

neocomplecache

vimでの補完と言えば、AutoComplePopが有名ですが、今回は色々と高機能なneocomplecache.vimに乗り換えました。


neocomplecacheの使い方や設定はVim-users.jp - Hack #177 : neocomplcacheの設定について知る 前編などに詳しく解説があるので省きます。自分は、Scala用のディクショナリを設定してscalaのLibraryからクラス名などが補完されるようにしています。


f:id:yuroyoro:20101104224756p:image

grep.vim

vimからgrepするプラグインです。個人的には、:GrepBufferで開いているbufferからgrepする機能が重宝しています。


f:id:yuroyoro:20101104224757p:image

このように、Grepの結果がウィンドウ分割されて表示され、カーソル行でリターンを押すとそのバッファやファイルに飛ぶことができます。


以下のように、でカーソル下のキーワードをbufferからGrepできるようにしてます。

" :Gb でGrepBufferする
command! -nargs=1 Gb :GrepBuffer
" カーソル下の単語をGrepBufferする
nnoremap :GrepBuffer
minibufexpl.vim

タブエディタ風にバッファ管理ウィンドウを表示します。

f:id:yuroyoro:20101104224758p:image



まぁ見たとおりです。開いているバッファが多くなると表示がエライことになるので、Exコマンドで表示/非表示を切り替えられるようにしています。

"------------------------------------
" MiniBufExplorer
"------------------------------------
"set minibfexp
let g:miniBufExplMapWindowNavVim=1 "hjklで移動
let g:miniBufExplSplitBelow=0 " Put new window above
let g:miniBufExplMapWindowNavArrows=1
let g:miniBufExplMapCTabSwitchBufs=1
let g:miniBufExplModSelTarget=1
let g:miniBufExplSplitToEdge=1
let g:miniBufExplMaxSize = 10

":TmでMiniBufExplorerの表示トグル
command! Mt :TMiniBufExplorer
unite.vim

unite.vimは、バッファやファイルなど様々な入力ソースを検索し、ファイルを開いたりディレクトリに移動したりyankしたりできます。


例えば、:Unite fileとコマンドを入力すると、このようにカレントディレクトリ以下からファイルを選択するバッファが開きます。

f:id:yuroyoro:20101104224759p:image

ここで、ファイル名などを入力することで絞り込みが行われます。ファイルやディレクトリを選択した状態でTABを押すと、可能なアクションが表示されます。

f:id:yuroyoro:20101104224800p:image


例えば、exというアクションを選択すると、選んだファイル名が入力された状態でコマンドモードに入ります。

f:id:yuroyoro:20101104225130p:image

他にも色々とできるんですが、俺自身がまだまだ使いこなせてないですorz

vimshell

Vimの中でShell機能を実現するプラグインです。スゴすぎる…!


f:id:yuroyoro:20101104225131p:image

このように、vimの中でシェルが動いていて、zshのように扱えます(下のウィンドウがVimShellです)。


insert modeでコマンド入力、normal modeでは通常のvimと同じように、Visual modeで選択できたり検索できたりします。さらに、neocomplecacheによる補完ができたりと強力です。


screentとvim間での連携がいまいちな感じですので、VimShelleでコマンドをほげほげしてyankしたりとか夢がひろがりんぐです。これから活用したいと思います。


入れているプラグイン一覧

こちらにもあります。

.vim/plugins_list.rst at master from yuroyoro/dotfiles - GitHub

管理系

vim-pathogen : bundleディレクトリ配下にpluginを配置することでプラグイン管理を簡単に
pathogen.vim - Easy manipulation of ’runtimepath’, ’path’, ’tags’, etc : vim online
Tips – Using git submodule keep your vim plugin up-to-date | DIG RUBY
vimプラグインでよりよいコーディングを | tech.kayac.com - KAYAC engineers’ blog
表示系

smooth_scroll.vim : スクロールを賢く
Smooth Scroll - Smooths scrolls the window for various key mappings : vim online
Vimで超スムーズスクロール - ナレッジエース
編集系

Align : 高機能整形・桁揃えプラグイン
Align - Help folks to align text, eqns, declarations, tables, etc : vim online
高性能なテキスト整形ツールAlignの使い方 #1 インストールから設定まで ― 名無しのvim使い
scripts/4 - VimWiki
surround.vim : テキストを括弧で囲む/削除する
surround.vim - Delete/change/add parentheses/quotes/XML-tags/much more with ease : vim online
scripts/16 - VimWiki
tpope/vim-surround - GitHub
SQLUtilities : SQL整形、生成ユーティリティ
SQLUtilities - SQL utilities - Formatting, generate - columns lists, procedures for databases : vim online
scripts/20 - VimWiki
NERD_commenter.vim :最強コメント処理 (cでコメントをトグル)
The NERD Commenter - A plugin that allows for easy commenting of code for many filetypes. : vim online
あにゃログ - NERD_commenter と戯れる
scrooloose/nerdcommenter - GitHub
YankRing.vim : ヤンクの履歴を管理し、順々に参照、出力できるようにする
YankRing.vim - Maintains a history of previous yanks, changes and deletes : vim online
YankRing.vim : ヤンクの履歴を管理し、順々に参照、出力できるようにする ― 名無しのvim使い
YankRing すごいよ YangRing - @sugamasao.blog.title # => ”コードで世界を変えたい”
quickrun.vim : 編集中のファイルを簡単に実行できるプラグイン
thinca/vim-quickrun - GitHub
quickrun - run a command and show its result quickly : vim online
Vim-users.jp - Hack #7: 編集中ファイルを実行し、結果を表示したままにする
編集中のスクリプトを直ぐに実行できるquickrun.vim - 理想未来はどうなった?
vimに欠かせない3つのプラグイン | tech.kayac.com - KAYAC engineers’ blog
neocomplcache.vim : 究極のVim的補完環境
presen/neocomplcache.txt at 998764e1072fa5b183c3da4705b8187658fa0b41 from Shougo/neocomplcache - GitHub
Vim-users.jp - Hack #49: 自動補完を活用する 後編
neocomplcache - Ultimate auto completion system for Vim : vim online
neocomplcacheをインストールしてみた - yuitowest的な
cecutil.vim : 他のpluginのためのutillity1
cecutil - Some utilities used by several of my scripts (window positioning, mark handling) : vim online
smartchr.vim : ==などの前後を整形
smartchr - Insert several candidates with a single key : vim online
smartchrというvim pluginが簡単便利で目ウロコ | この先生きのこるには
smartchr周りの設定を変更 - 物置き
vim-operator-user : 簡単にoperatorを定義できるようにする
kana/vim-operator-user - GitHub
ぼちぼち散歩 Vimでoperator-userを使って他のプラグインをoperatorとして使えるようにしてみた
operator-camelize : camel-caseへの変換
tyru/operator-camelize.vim - GitHub
operator-replace : yankしたものでreplaceする
kana/vim-operator-replace - GitHub
operator-replace - Operator to replace text with register content : vim online
vim神のplugin operator-replaceを導入してみて思ったこと - yamazakiccsのvim日記 - vimグループ
textobj-user : 簡単にVimエディタのテキストオブジェクトをつくれる
textobj-user - Support for user-defined text objects : vim online
textobj-userで遊ぶ - サイト更新停滞ちうっ
vim-textobj-syntax : syntax hilightされたものをtext-objectに
kana/vim-textobj-syntax - GitHub
vim-textobj-lastpat : 最後に検索されたパターンをtext-objectに
kana/vim-textobj-lastpat - GitHub
vim-textobj-jabraces : 「foo」 or 【bar】などをtext-objectに
kana/vim-textobj-jabraces - GitHub
vim-textobj-indent : インデントされたものをtext-objectに
404 - GitHub
vim-textobj-function : 関数の中身をtext-objectに
404 - GitHub
vim-textobj-fold : 折りたたまれたアレをtext-objectに
404 - GitHub
vim-textobj-entire : buffer全体をtext-objectに
404 - GitHub
vim-textobj-plugins : いろんなものをtext-objectにする
thinca/vim-textobj-plugins - GitHub
textobj-function-javascript と textobj-function-perl 書いた - 永遠に未完成
検索系

eregex.vim : vimの正規表現をrubyやperlの正規表現な入力でできる :%S/perlregex/
vim でのオススメ plugin - coリ・ー・ン<2nd life
eregex.vimのダウンロード : Vector ソフトを探す!
grep.vim : 外部のgrep利用。:Grepで対話形式でgrep :Rgrepは再帰
vim でのオススメ plugin - coリ・ー・ン<2nd life
grep.vim - Grep search tools integration with Vim : vim online
バッファ管理系

bufexplorer.vim : beでバッファのリストを表示
bufexplorer.zip - Buffer Explorer / Browser : vim online
minibufexpl.vim : タブエディタ風にバッファ管理ウィンドウを表示
minibufexpl.vim - Elegant buffer explorer - takes very little screen space : vim online
minibufexpl.vim : タブエディタ風にバッファ管理ウィンドウを表示 ― 名無しのvim使い
DumbBuf.vim : quickbufっぽくbufferを管理。とりあえずでバッファ一覧
DumbBuf.vimというプラグインを作ってます - bless {category => 'vim'}, shift - vimグループ
Downloads for tyru’s DumbBuf.vim - GitHub
unite.vim : - すべてを破壊し、すべてを繋げ - vim scriptで実装されたanythingプラグイン
Shougo/unite.vim - GitHub
vimプラグインでよりよいコーディングを | tech.kayac.com - KAYAC engineers’ blog
ページが見つかりませんでした - ぼくのかいば@かじけん
ページが見つかりませんでした | st.Prestage
Unite vim
fuf → unite に乗り換えて1日目 - basyura’s blog
[unite] - 永遠に未完成
ファイル系

NERDTree : ツリー型エクスプローラ
The NERD tree - A tree explorer plugin for navigating the filesystem : vim online
scripts/18 - VimWiki
無闇にわぐらない - FC2 BLOG パスワード認証
scrooloose/nerdtree - GitHub
project.vim : IDE風のファイル管理
project.vim を使ってみる - Hidde’s Tips
project.vimの使い方 - HOSHINA’s Diary.NET(2007-08-20)
project.tar.gz - Organize/Navigate projects of files (like IDE/buffer explorer) : vim online
vtreeexplorer.vim : ツリー状にファイルやディレクトリの一覧を表示
vtreeexplorer - tree based file explorer - the original : vim online
vimでファイルエクスプローラを使用する - 気負わない日記
その他

git-vim : gitをvimでー
motemen/git-vim - GitHub
Vim-users.jp - Hack #67: Gitを使う
urilib.vim : vim scriptからURLを扱うライブラリ
tyru/urilib.vim - GitHub
open-browser.vim : URLをブラウザで開く
tyru/open-browser.vim - GitHub
open-browser.vim, urilib.vim - Humanity
hatena.vim : vimからはてなダイアリーを更新
hatena.vimを導入してvimからはてなダイアリーを更新したメモ - 今日もスミマセン。
motemen/hatena-vim - GitHub
vimproc : vimから非同期実行。vimshelleで必要
Shougo/vimproc - GitHub
vimshell : vimのshell
Shougo/vimshell - GitHub
VimShell最強ですね、わかります。 - 理想未来はどうなった?
Vim-users.jp - vimshell
開発系

vim-ruby : VimでRubyを扱う際の最も基本的な拡張機能
vimでrubyプログラミング S.S.S. blog/ウェブリブログ
Vimを使ったRuby On Rails開発環境の構築 - ナレッジエース
vim-ruby/vim-ruby - GitHub
refe.vim : vimからrefeでRuby のリファレンスマニュアルのエントリを引く
refe.vim - rails2u.com
Vimでカーソル下の単語からRubyのリファレンスを検索 - ナレッジエース
ぼちぼち散歩 MacのGVimで文字化けしないようにrefe.vimを使う
ReFe
rails.vim : rails的なアレ
rails.vim - Ruby on Rails: easy file navigation, enhanced syntax highlighting, and more : vim online
rails.vim まとめ - coリ・ー・ン<2nd life
tpope/vim-rails - GitHub
vim-ref : perldocやphpmanual等のリファレンスをvim上で見るためのプラグイン
vimプラグインでよりよいコーディングを | tech.kayac.com - KAYAC engineers’ blog
thinca/vim-ref - GitHub
python.vim : 自前で用意したpython用の設定.indentのみ設定
Pydiction : Python用の入力補完
Pydiction - Tab-complete your Python code : vim online
Pythonの開発環境をvimに整える - やさしいデスマーチ
scala.vim : 自前で用意したscala用の設定
.vimrc

とりあえず.vimrc全部貼っておきますね。Githubにも置いてあります。


yuroyoro/dotfiles - GitHub

"-------------------------------------------------------------------------------
" 基本設定 Basics
"-------------------------------------------------------------------------------
set nocompatible " Vimっす。vi互換なしっす。
let mapleader = "," " キーマップリーダー
set scrolloff=5 " スクロール時の余白確保
set textwidth=0 " 一行に長い文章を書いていても自動折り返しをしない
set nobackup " バックアップ取らない
set autoread " 他で書き換えられたら自動で読み直す
set noswapfile " スワップファイル作らない
set hidden " 編集中でも他のファイルを開けるようにする
set backspace=indent,eol,start " バックスペースでなんでも消せるように
set formatoptions=lmoq " テキスト整形オプション,マルチバイト系を追加
set vb t_vb= " ビープをならさない
set browsedir=buffer " Exploreの初期ディレクトリ
set whichwrap=b,s,h,l,<,>,[,] " カーソルを行頭、行末で止まらないようにする
set showcmd " コマンドをステータス行に表示
set showmode " 現在のモードを表示
set viminfo='50,<1000,s100,\"50 " viminfoファイルの設定
set modelines=0 " モードラインは無効

" OSのクリップボードを使用する
set clipboard+=unnamed
" ターミナルでマウスを使用できるようにする
set mouse=a
set guioptions+=a
set ttymouse=xterm2

"ヤンクした文字は、システムのクリップボードに入れる"
set clipboard=unnamed
" 挿入モードでCtrl+kを押すとクリップボードの内容を貼り付けられるようにする "
imap "*pa

" Ev/Rvでvimrcの編集と反映
command! Ev edit $MYVIMRC
command! Rv source $MYVIMRC

" pathogenでftdetectなどをloadさせるために一度ファイルタイプ判定をoff
filetype off
" pathogen.vimによってbundle配下のpluginをpathに加える
call pathogen#runtime_append_all_bundles()
call pathogen#helptags()
set helpfile=$VIMRUNTIME/doc/help.txt
" ファイルタイプ判定をon
filetype plugin on

"-------------------------------------------------------------------------------
" ステータスライン StatusLine
"-------------------------------------------------------------------------------
set laststatus=2 " 常にステータスラインを表示

"カーソルが何行目の何列目に置かれているかを表示する
set ruler

"ステータスラインに文字コードと改行文字を表示する
if winwidth(0) >= 120
set statusline=%<[%n]%m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).':'.&ff.']'}%y\ %F%=[%{GetB()}]\ %l,%c%V%8P
else
set statusline=%<[%n]%m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).':'.&ff.']'}%y\ %f%=[%{GetB()}]\ %l,%c%V%8P
endif

"入力モード時、ステータスラインのカラーを変更
augroup InsertHook
autocmd!
autocmd InsertEnter * highlight StatusLine guifg=#ccdc90 guibg=#2E4340
autocmd InsertLeave * highlight StatusLine guifg=#2E4340 guibg=#ccdc90
augroup END

function! GetB()
let c = matchstr(getline('.'), '.', col('.') - 1)
let c = iconv(c, &enc, &fenc)
return String2Hex(c)
endfunction
" help eval-examples
" The function Nr2Hex() returns the Hex string of a number.
func! Nr2Hex(nr)
let n = a:nr
let r = ""
while n
let r = '0123456789ABCDEF'[n % 16] . r
let n = n / 16
endwhile
return r
endfunc
" The function String2Hex() converts each character in a string to a two
" character Hex string.
func! String2Hex(str)
let out = ''
let ix = 0
while ix < strlen(a:str)
let out = out . Nr2Hex(char2nr(a:str[ix]))
let ix = ix + 1
endwhile
return out
endfunc

"-------------------------------------------------------------------------------
" 表示 Apperance
"-------------------------------------------------------------------------------
set showmatch " 括弧の対応をハイライト
set number " 行番号表示
set list " 不可視文字表示
set listchars=tab:>.,trail:_,extends:>,precedes:< " 不可視文字の表示形式
set display=uhex " 印字不可能文字を16進数で表示

" 全角スペースの表示
highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=darkgray
match ZenkakuSpace / /

" カーソル行をハイライト
set cursorline
" カレントウィンドウにのみ罫線を引く
augroup cch
autocmd! cch
autocmd WinLeave * set nocursorline
autocmd WinEnter,BufRead * set cursorline
augroup END

:hi clear CursorLine
:hi CursorLine gui=underline
highlight CursorLine ctermbg=black guibg=black

" コマンド実行中は再描画しない
:set lazyredraw
" 高速ターミナル接続を行う
:set ttyfast

"-------------------------------------------------------------------------------
" インデント Indent
"-------------------------------------------------------------------------------
set autoindent " 自動でインデント
"set paste " ペースト時にautoindentを無効に(onにするとautocomplpop.vimが動かない)
set smartindent " 新しい行を開始したときに、新しい行のインデントを現在行と同じ量にする。
set cindent " Cプログラムファイルの自動インデントを始める

" softtabstopはTabキー押し下げ時の挿入される空白の量,0の場合はtabstopと同じ,BSにも影響する
set tabstop=2 shiftwidth=2 softtabstop=0

if has("autocmd")
"ファイルタイプの検索を有効にする
filetype plugin on
"そのファイルタイプにあわせたインデントを利用する
filetype indent on
" これらのftではインデントを無効に
"autocmd FileType php filetype indent off

autocmd FileType html :set indentexpr=
autocmd FileType xhtml :set indentexpr=
endif


"-------------------------------------------------------------------------------
" 補完・履歴 Complete
"-------------------------------------------------------------------------------
set wildmenu " コマンド補完を強化
set wildchar= " コマンド補完を開始するキー
set wildmode=list:full " リスト表示,最長マッチ
set history=1000 " コマンド・検索パターンの履歴数
set complete+=k " 補完に辞書ファイル追加


"でomni補完
" imap

" -- tabでオムニ補完
function! InsertTabWrapper()
if pumvisible()
return "\"
endif
let col = col('.') - 1
if !col || getline('.')[col -1] !~ '\k\|<\|/'
return "\"
elseif exists('&omnifunc') && &omnifunc == ''
return "\"
else
return "\\"
endif
endfunction
inoremap =InsertTabWrapper()


"-------------------------------------------------------------------------------
" タグ関連 Tags
"-------------------------------------------------------------------------------
" set tags
if has("autochdir")
" 編集しているファイルのディレクトリに自動で移動
set autochdir
set tags=tags;
else
set tags=./tags,./../tags,./*/tags,./../../tags,./../../../tags,./../../../../tags,./../../../../../tags
endif

"はscreentとかぶるので削除
"tab pagesを使い易くする
" nnoremap
" nnoremap n ;tabnew
" nnoremap c ;tabclose
" nnoremap o ;tabonly
" nnoremap j ;execute 'tabnext' 1 + (tabpagenr() + v:count1 - 1) % tabpagenr('$')
" nnoremap k gT

"tags-and-searchesを使い易くする
nnoremap t
"「飛ぶ」
nnoremap tt
"「進む」
nnoremap tj ;tag
"「戻る」
nnoremap tk ;pop
"履歴一覧
nnoremap tl ;tags

"-------------------------------------------------------------------------------
" 検索設定 Search
"-------------------------------------------------------------------------------
set wrapscan " 最後まで検索したら先頭へ戻る
set ignorecase " 大文字小文字無視
set smartcase " 検索文字列に大文字が含まれている場合は区別して検索する
set incsearch " インクリメンタルサーチ
set hlsearch " 検索文字をハイライト
"Escの2回押しでハイライト消去
nmap ;nohlsearch

"選択した文字列を検索
vnoremap // y/=escape(@", '\\/.*$^~')
"選択した文字列を置換
vnoremap /r "xy;%s/=escape(@x, '\\/.*$^~')//gc

"s*置換後文字列/gでカーソル下のキーワードを置換
nnoremap s* ':%substitute/\<' . expand('') . '\>/'

" Ctrl-iでヘルプ
nnoremap :help
" カーソル下のキーワードをヘルプでひく
nnoremap :help

" :Gb でGrepBufferする
command! -nargs=1 Gb :GrepBuffer
" カーソル下の単語をGrepBufferする
nnoremap :GrepBuffer

"-------------------------------------------------------------------------------
" 移動設定 Move
"-------------------------------------------------------------------------------

" カーソルを表示行で移動する。論理行移動は,
nnoremap h
nnoremap j gj
nnoremap k gk
nnoremap l
nnoremap gj
nnoremap gk

" 0, 9で行頭、行末へ
nmap 1 0
nmap 0 ^
nmap 9 $

" insert mode での移動
imap
imap
" インサートモードでもhjklで移動(Ctrl押すけどね)
imap
imap
imap
imap

"j, kで画面送り
noremap j
noremap k

" spaceで次のbufferへ。back-spaceで前のbufferへ
nmap ;MBEbn
nmap ;MBEbp

" F2で前のバッファ
map ;bp
" F3で次のバッファ
map ;bn
" F4でバッファを削除する
map ;bw

"フレームサイズを怠惰に変更する
map +
map -

" 前回終了したカーソル行に移動
autocmd BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal g`\"" | endif

" 最後に編集された位置に移動
nnoremap gb '[
nnoremap gp ']

" 対応する括弧に移動
nnoremap [ %
nnoremap ] %

" 最後に変更されたテキストを選択する
nnoremap gc `[v`]
vnoremap gc ;normal gc
onoremap gc ;normal gc

" カーソル位置の単語をyankする
nnoremap vy vawy

" 矩形選択で自由に移動する
set virtualedit+=block

"ビジュアルモード時vで行末まで選択
vnoremap v $h

" CTRL-hjklでウィンドウ移動
nnoremap ;j
nnoremap ;j
nnoremap ;j
nnoremap ;j

"-------------------------------------------------------------------------------
" エンコーディング関連 Encoding
"-------------------------------------------------------------------------------
set ffs=unix,dos,mac " 改行文字
set encoding=utf-8 " デフォルトエンコーディング

" 文字コード関連
" from ずんWiki http://www.kawaz.jp/pukiwiki/?vim#content_1_7
" 文字コードの自動認識
if &encoding !=# 'utf-8'
set encoding=japan
set fileencoding=japan
endif
if has('iconv')
let s:enc_euc = 'euc-jp'
let s:enc_jis = 'iso-2022-jp'
" iconvがeucJP-msに対応しているかをチェック
if iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb"
let s:enc_euc = 'eucjp-ms'
let s:enc_jis = 'iso-2022-jp-3'
" iconvがJISX0213に対応しているかをチェック
elseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb"
let s:enc_euc = 'euc-jisx0213'
let s:enc_jis = 'iso-2022-jp-3'
endif
" fileencodingsを構築
if &encoding ==# 'utf-8'
let s:fileencodings_default = &fileencodings
let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
let &fileencodings = &fileencodings .','. s:fileencodings_default
unlet s:fileencodings_default
else
let &fileencodings = &fileencodings .','. s:enc_jis
set fileencodings+=utf-8,ucs-2le,ucs-2
if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'
set fileencodings+=cp932
set fileencodings-=euc-jp
set fileencodings-=euc-jisx0213
set fileencodings-=eucjp-ms
let &encoding = s:enc_euc
let &fileencoding = s:enc_euc
else
let &fileencodings = &fileencodings .','. s:enc_euc
endif
endif
" 定数を処分
unlet s:enc_euc
unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
if has('autocmd')
function! AU_ReCheck_FENC()
if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0
let &fileencoding=&encoding
endif
endfunction
autocmd BufReadPost * call AU_ReCheck_FENC()
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
set ambiwidth=double
endif

" cvsの時は文字コードをeuc-jpに設定
autocmd FileType cvs :set fileencoding=euc-jp
" 以下のファイルの時は文字コードをutf-8に設定
autocmd FileType svn :set fileencoding=utf-8
autocmd FileType js :set fileencoding=utf-8
autocmd FileType css :set fileencoding=utf-8
autocmd FileType html :set fileencoding=utf-8
autocmd FileType xml :set fileencoding=utf-8
autocmd FileType java :set fileencoding=utf-8
autocmd FileType scala :set fileencoding=utf-8

" ワイルドカードで表示するときに優先度を低くする拡張子
set suffixes=.bak,~,.swp,.o,.info,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg,.inx,.out,.toc

" 指定文字コードで強制的にファイルを開く
command! Cp932 edit ++enc=cp932
command! Eucjp edit ++enc=euc-jp
command! Iso2022jp edit ++enc=iso-2022-jp
command! Utf8 edit ++enc=utf-8
command! Jis Iso2022jp
command! Sjis Cp932

"-------------------------------------------------------------------------------
" カラー関連 Colors
"-------------------------------------------------------------------------------

" ターミナルタイプによるカラー設定
if &term =~ "xterm-debian" || &term =~ "xterm-xfree86" || &term =~ "xterm-256color"
set t_Co=16
set t_Sf=^[[3%dm
set t_Sb=^[[4%dm
elseif &term =~ "xterm-color"
set t_Co=8
set t_Sf=^[[3%dm
set t_Sb=^[[4%dm
endif

"ポップアップメニューのカラーを設定
"hi Pmenu guibg=#666666
"hi PmenuSel guibg=#8cd0d3 guifg=#666666
"hi PmenuSbar guibg=#333333

" ハイライト on
syntax enable

" 補完候補の色づけ for vim7
hi Pmenu ctermbg=white ctermfg=darkgray
hi PmenuSel ctermbg=blue ctermfg=white
hi PmenuSbar ctermbg=0 ctermfg=9

"-------------------------------------------------------------------------------
" 編集関連 Edit
"-------------------------------------------------------------------------------

" insertモードを抜けるとIMEオフ
set noimdisable
set iminsert=0 imsearch=0
set noimcmdline
inoremap :set iminsert=0

" yeでそのカーソル位置にある単語をレジスタに追加
nmap ye ;let @"=expand("")
" Visualモードでのpで選択範囲をレジスタの内容に置き換える
vnoremap p ;let current_reg = @"gvdi=current_reg

" Tabキーを空白に変換
set expandtab

" コンマの後に自動的にスペースを挿入
inoremap , ,
" XMLの閉タグを自動挿入
augroup MyXML
autocmd!
autocmd Filetype xml inoremap
augroup END

" Insert mode中で単語単位/行単位の削除をアンドゥ可能にする
inoremap u
inoremap u

" :Ptでインデントモード切替
command! Pt :set paste!

" y9で行末までヤンク
nmap y9 y$
" y0で行頭までヤンク
nmap y0 y^

"
" 括弧を自動補完
"inoremap { {}
"inoremap [
"inoremap ( ()
"inoremap " ""
"inoremap ' ''
"vnoremap { "zdi^V{z}
"vnoremap [ "zdi^V[z]
"vnoremap ( "zdi^V(z)
"vnoremap " "zdi^V"z^V"
"vnoremap ' "zdi'z'

" 保存時に行末の空白を除去する
autocmd BufWritePre * :%s/\s\+$//ge
" 保存時にtabをスペースに変換する
autocmd BufWritePre * :%s/\t/ /ge

" 日時の自動入力
inoremap ,df strftime('%Y/%m/%d %H:%M:%S')
inoremap ,dd strftime('%Y/%m/%d')
inoremap ,dt strftime('%H:%M:%S')

"-------------------------------------------------------------------------------
" その他 Misc
"-------------------------------------------------------------------------------

" ;でコマンド入力( ;と:を入れ替)
noremap ; :
noremap : ;

"-------------------------------------------------------------------------------
" プラグインごとの設定 Plugins
"-------------------------------------------------------------------------------

"------------------------------------
" YankRing.vim
"------------------------------------
" Yankの履歴参照
nmap ,y ;YRShow

"------------------------------------
" MiniBufExplorer
"------------------------------------
"set minibfexp
let g:miniBufExplMapWindowNavVim=1 "hjklで移動
let g:miniBufExplSplitBelow=0 " Put new window above
let g:miniBufExplMapWindowNavArrows=1
let g:miniBufExplMapCTabSwitchBufs=1
let g:miniBufExplModSelTarget=1
let g:miniBufExplSplitToEdge=1
let g:miniBufExplMaxSize = 10

":TmでMiniBufExplorerの表示トグル
command! Mt :TMiniBufExplorer

"------------------------------------
" Align
"------------------------------------
" Alignを日本語環境で使用するための設定
let g:Align_xstrlen = 3

"------------------------------------
" VTreeExplorer
"------------------------------------
" 縦に表示する
let g:treeExplVertical=1

"------------------------------------
" NERD_commenter.vim
"------------------------------------
" コメントの間にスペースを空ける
let NERDSpaceDelims = 1
"xでコメントをトグル(NERD_commenter.vim)
map x, c
""未対応ファイルタイプのエラーメッセージを表示しない
let NERDShutUp=1

" ------------------------------------
" grep.vim
"------------------------------------
" 検索外のディレクトリ、ファイルパターン
let Grep_Skip_Dirs = '.svn .git .hg'
let Grep_Skip_Files = '*.bak *~'
-
"------------------------------------
" surround.vim
"------------------------------------
" s, ssで選択範囲を指定文字でくくる
" nmap s Ysurround
" nmap ss Yssurround

" "------------------------------------
" " smartchr.vim
" "------------------------------------
"
" " 演算子の間に空白を入れる
" inoremap + smartchr#one_of(' + ', ' ++ ', '+')
" inoremap += smartchr#one_of(' += ')
" " inoremap - smartchr#one_of(' - ', ' -- ', '-')
" inoremap -= smartchr#one_of(' -= ')
" " inoremap / smartchr#one_of(' / ', ' // ', '/')
" inoremap /= smartchr#one_of(' /= ')
" inoremap * smartchr#one_of(' * ', ' ** ', '*')
" inoremap *= smartchr#one_of(' *= ')
" inoremap & smartchr#one_of(' & ', ' && ', '&')
" inoremap % smartchr#one_of(' % ', '%')
" inoremap => smartchr#one_of(' => ')
" inoremap <- smartchr#one_of(' <- ')
" inoremap smartchr#one_of(' ', ' ', '')
" inoremap , smartchr#one_of(', ', ',')
" " 3項演算子の場合は、後ろのみ空白を入れる
" inoremap ? smartchr#one_of('? ', '?')
" " inoremap : smartchr#one_of(': ', '::', ':')

" " =の場合、単純な代入や比較演算子として入力する場合は前後にスペースをいれる。
" " 複合演算代入としての入力の場合は、直前のスペースを削除して=を入力
" inoremap = search('\(&\\+\-\/\>\<\) \%#', 'bcn')? '= ' : search('\(*\!\)\%#', 'bcn') ? '= ' : smartchr#one_of(' = ', ' == ', '=')

" " 下記の文字は連続して現れることがまれなので、二回続けて入力したら改行する
" inoremap } smartchr#one_of('}', '}')
" inoremap ; smartchr#one_of(';', ';')
" "()は空白入れる
" inoremap ( smartchr#one_of('( ')
" inoremap ) smartchr#one_of(' )')

" " if文直後の(は自動で間に空白を入れる
" inoremap ( search('\<\if\%#', 'bcn')? ' (': '('


"------------------------------------
" git.vim
"------------------------------------
let g:git_no_map_default = 1
let g:git_command_edit = 'rightbelow vnew'
nnoremap gd :GitDiff --cached
nnoremap gD :GitDiff
nnoremap gs :GitStatus
nnoremap gl :GitLog
nnoremap gL :GitLog -u \| head -10000
nnoremap ga :GitAdd
nnoremap gA :GitAdd
nnoremap gc :GitCommit
nnoremap gC :GitCommit --amend
nnoremap gp :Git push


"------------------------------------
" BufExplorer
"------------------------------------
"lでBufferList
nnoremap l :BufExplorer

"------------------------------------
" VTreeExplorer
"------------------------------------
let g:treeExplVertical=1
"tでディレクトリツリー表示
noremap t :VSTreeExplore
"分割したウィンドウのサイズ
let g:treeExplWinSize=30

"------------------------------------
" DumbBuf.vim
"------------------------------------
"bでBufferList
let dumbbuf_hotkey = 'b'
let dumbbuf_mappings = {
\ 'n': {
\'': { 'opt': '', 'mapto': ':close' }
\}
\}
let dumbbuf_single_key = 1
let dumbbuf_updatetime = 1 " &updatetimeの最小値
let dumbbuf_wrap_cursor = 0
let dumbbuf_remove_marked_when_close = 1

"------------------------------------
" open-blowser.vim
"------------------------------------

" カーソル下のURLをブラウザで開く
nmap fu (openbrowser-open)
vmap fu (openbrowser-open)
" カーソル下のキーワードをググる
nnoremap fs :OpenBrowserSearch

"------------------------------------
" operator-camelize.vim
"------------------------------------
" camel-caseへの変換
map u (operator-camelize)
map U (operator-decamelize)

"------------------------------------
" operator-replace.vim
"------------------------------------
" RwなどでYankしてるもので置き換える
map R (operator-replace)

"------------------------------------
" unite.vim
"------------------------------------
let g:hatena_user='yuroyoro'

"------------------------------------
" vimshell
"------------------------------------
let g:vimshell_user_prompt = 'fnamemodify(getcwd(), ":~")'
let g:vimshell_right_prompt = 'vimshell#vcs#info("(%s)-[%b]", "(%s)-[%b|%a]")'
let g:vimshell_enable_smart_case = 1

if has('win32') || has('win64')
" Display user name on Windows.
let g:vimshell_prompt = $USERNAME."% "
else
" Display user name on Linux.
let g:vimshell_prompt = $USER."% "

call vimshell#set_execute_file('bmp,jpg,png,gif', 'gexe eog')
call vimshell#set_execute_file('mp3,m4a,ogg', 'gexe amarok')
let g:vimshell_execute_file_list['zip'] = 'zipinfo'
call vimshell#set_execute_file('tgz,gz', 'gzcat')
call vimshell#set_execute_file('tbz,bz2', 'bzcat')
endif

function! g:my_chpwd(args, context)
call vimshell#execute('echo "chpwd"')
endfunction
function! g:my_emptycmd(cmdline, context)
call vimshell#execute('echo "emptycmd"')
return a:cmdline
endfunction
function! g:my_preprompt(args, context)
call vimshell#execute('echo "preprompt"')
endfunction
function! g:my_preexec(cmdline, context)
call vimshell#execute('echo "preexec"')

if a:cmdline =~# '^\s*diff\>'
call vimshell#set_syntax('diff')
endif
return a:cmdline
endfunction

autocmd FileType vimshell
\ call vimshell#altercmd#define('g', 'git')
\| call vimshell#altercmd#define('i', 'iexe')
\| call vimshell#altercmd#define('l', 'll')
\| call vimshell#altercmd#define('ll', 'ls -l')
\| call vimshell#hook#set('chpwd', ['g:my_chpwd'])
\| call vimshell#hook#set('emptycmd', ['g:my_emptycmd'])
\| call vimshell#hook#set('preprompt', ['g:my_preprompt'])
\| call vimshell#hook#set('preexec', ['g:my_preexec'])

command! Vs :VimShell

"------------------------------------
" neocomplecache.vim
"------------------------------------
" " AutoComplPopを無効にする
" let g:acp_enableAtStartup = 0
" NeoComplCacheを有効にする
let g:neocomplcache_enable_at_startup = 1
" smarrt case有効化。 大文字が入力されるまで大文字小文字の区別を無視する
let g:neocomplcache_enable_smart_case = 1
" camle caseを有効化。大文字を区切りとしたワイルドカードのように振る舞う
let g:neocomplcache_enable_camel_case_completion = 1
" _(アンダーバー)区切りの補完を有効化
let g:neocomplcache_enable_underbar_completion = 1
" シンタックスをキャッシュするときの最小文字長を3に
let g:neocomplcache_min_syntax_length = 3
" neocomplcacheを自動的にロックするバッファ名のパターン
let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'
" -入力による候補番号の表示
let g:neocomplcache_enable_quick_match = 1
" 補完候補の一番先頭を選択状態にする(AutoComplPopと似た動作)
let g:neocomplcache_enable_auto_select = 1

" Define dictionary.
let g:neocomplcache_dictionary_filetype_lists = {
\ 'default' : '',
\ 'vimshell' : $HOME.'/.vimshell_hist',
\ 'scala' : $HOME.'/.vim/bundle/vim-scala/dict/scala.dict',
\ 'java' : $HOME.'/.vim/dict/java.dict',
\ 'c' : $HOME.'/.vim/dict/c.dict',
\ 'cpp' : $HOME.'/.vim/dict/cpp.dict',
\ 'javascript' : $HOME.'/.vim/dict/javascript.dict',
\ 'ocaml' : $HOME.'/.vim/dict/ocaml.dict',
\ 'perl' : $HOME.'/.vim/dict/perl.dict',
\ 'php' : $HOME.'/.vim/dict/php.dict',
\ 'scheme' : $HOME.'/.vim/dict/scheme.dict',
\ 'vm' : $HOME.'/.vim/dict/vim.dict'
\ }

" Define keyword.
" if !exists('g:neocomplcache_keyword_patterns')
" let g:neocomplcache_keyword_patterns = {}
" endif
" let g:neocomplcache_keyword_patterns['default'] = '\h\w*'

" ユーザー定義スニペット保存ディレクトリ
let g:neocomplcache_snippets_dir = $HOME.'/.vim/snippets'

" スニペット
imap (neocomplcache_snippets_expand)
smap (neocomplcache_snippets_expand)

" 補完を選択しpopupを閉じる
inoremap neocomplcache#close_popup()
" 補完をキャンセルしpopupを閉じる
inoremap neocomplcache#cancel_popup()
" TABで補完できるようにする
inoremap pumvisible() ? "\" : "\"
" undo
inoremap neocomplcache#undo_completion()
" 補完候補の共通部分までを補完する
inoremap neocomplcache#complete_common_string()
" SuperTab like snippets behavior.
imap neocomplcache#sources#snippets_complete#expandable() ? "\(neocomplcache_snippets_expand)" : pumvisible() ? "\" : "\"
" C-kを押すと行末まで削除
inoremap D
" C-nでneocomplcache補完
inoremap pumvisible() ? "\" : "\\\"
" C-pでkeyword補完
inoremap pumvisible() ? "\" : "\\"
" 補完候補が出ていたら確定、なければ改行
inoremap pumvisible() ? neocomplcache#close_popup() : ""

" : completion.
inoremap pumvisible() ? "\" : "\"
" , : close popup and delete backword char.
inoremap neocomplcache#smart_close_popup()."\"
inoremap neocomplcache#smart_close_popup()."\"
inoremap &filetype == 'vim' ? "\" : neocomplcache#manual_omni_complete()

" FileType毎のOmni補完を設定
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType c set omnifunc=ccomplete#Complete
autocmd FileType ruby set omnifunc=rubycomplete#Complete

" Enable heavy omni completion.
if !exists('g:neocomplcache_omni_patterns')
let g:neocomplcache_omni_patterns = {}
endif
let g:neocomplcache_omni_patterns.ruby = '[^. *\t]\.\w*\|\h\w*::'
let g:neocomplcache_omni_patterns.php = '[^. \t]->\h\w*\|\h\w*::'

"------------------------------------
" unite.vim
"------------------------------------
" The prefix key.
nnoremap [unite]
nmap f [unite]

nnoremap [unite]u :Unite
nnoremap [unite]a :UniteWithCurrentDir -buffer-name=files buffer file_mru bookmark file
nnoremap [unite]f :Unite -buffer-name=files file
nnoremap [unite]b :Unite buffer
nnoremap [unite]m :Unite file_mru

" nnoremap [unite]b :UniteWithBufferDir -buffer-name=files buffer file_mru bookmark file

autocmd FileType unite call s:unite_my_settings()
function! s:unite_my_settings()"{{{
" Overwrite settings.
imap jj (unite_insert_leave)
nnoremap :call unite#mappings#do_action('preview')
imap (unite_delete_backward_path)
" Start insert.
let g:unite_enable_start_insert = 1
endfunction"}}}

let g:unite_source_file_mru_limit = 200