( ꒪⌓꒪) ゆるよろ日記

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

指定したコミットで修正されたファイルをvimで開く

.gitconfigにこういうalias書いた。'git modified HEAD~'で一つ前のコミットで修正されたファイルをvimで開く

[alias]
  # 指定したコミットで変更されたファイルを編集する
  modified = "!f() { git diff $1..$1\\^ --name-only | xargs sh -c 'vim "$@" < /dev/tty' - ;}; f"

dotfiles/.gitconfig at master · yuroyoro/dotfiles · GitHub


もっとうまい方法ないんか?あ

iTerm2 + zsh + tmux + vim で快適な256色ターミナル環境を構築する

こんにちわ。債務者ことゆろよろです。家買いました。


さて、最近こんなまとめが話題になりました。自分もコメントしましたが、すごい情報量になってます。


これ知らないプログラマって損してんなって思う汎用的なツール #JavaScript #PHP #Ruby #Python #HTML - Qiita
【まとめ】これ知らないプログラマって損してんなって思う汎用的なツール 100超 #PHP #JavaScript #Python #Ruby #HTML - Qiita


で、自分のコメントにも書いたのだけど、基本的に仕事はターミナルでssh接続して、Vimでコード書いてるので、この辺の環境構築についてまとめてみた。最近Terminal.appからiTerm2に移行して、screenからtmuxに乗り換えたので、その辺も含めて導入方法を書いておく。


手元の端末はMBPでOSX Lionだけど、ほぼ同じ設定でUbuntu11.10/CentOS5.6/Sientific-Linux6.2で使い回してる。

スクショ

こんなかんじです
f:id:yuroyoro:20120211114748p:image:w640
f:id:yuroyoro:20120211114747p:image:w640
f:id:yuroyoro:20120211114744p:image:w640

導入するものリスト

  • iTerm2(ターミナル)
  • homebrew(パッケージ管理)
  • zsh
  • git
  • tig
  • tmux
  • vim
    • vundle(プラグイン管理)
    • neocomplecache
    • unite.vim
    • vim-powerline
    • その他色々


自分のdotfilesに関しては、Githubにおいてあります。


yuroyoro/dotfiles · GitHub

手っ取り早く設定するには

この記事にある手順で、Vimの導入まで進めます。設定ファイルは、以下のように$HOMEに、自分が公開してるdotfilesをcloneして、setup.shを叩けばよいです。

git clone https://github.com/yuroyoro/dotfiles.git
cd dotfiles
./setup.sh


setup.shでは、各設定ファイルへのシンボリックリンクを生成するのですが、すでにファイルが存在する場合はlnコマンドが失敗するので、その場合は適宜対処してください。


tmuxとmac osxのクリップボード連携を行うために、 reattach-to-user-namespaceコマンドを導入します。

git clone https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git
cd tmux-MacOSX-pasteboard
make reattach-to-user-namespace && cp reattach-to-user-namespace ~/bin


Vimを使うには、もう少し設定が必要です。
まず、~/.vim/bundleディレクトリを作成し、そこにvubdle.vimをcloneします。

cd ~/.vim
mkdir bundle
cd bundle
git clone https://github.com/gmarik/vundle.git


次に、vimコマンドででvimを起動します。最初はエラーが出ますが無視してください。で、":"を押してコマンドモードに入り、BundleInstallを実行します。

f:id:yuroyoro:20120211114733p:image


すると、利用するプラグインがダウンロードされます。


f:id:yuroyoro:20120211114732p:image


最後に、vim-procをmakeします。

cd ~/.vim/bundle/vimproc/
make -f make_mac.mak


vim-powerlineを使うので、フォントにパッチを当てないとステータスラインがちゃんと表示されません。フォントにパッチ当てるの面倒だったりするなら、
.vimrc.statuslineにある以下の行をコメントアウトしてください。

" vim-powerlineでフォントにパッチを当てないなら以下をコメントアウト
let g:Powerline_symbols = 'fancy'


では、各ツールの導入手順・使い方など。

iTerm2の導入

ターミナルは一番長い時間使う、もっとも重要なソフトウェアです。今まではTerminal.appでしたが、vim-poewlineがiTerm2じゃないと動かないので移行しました。


f:id:yuroyoro:20120211121632p:image:w360


まずはiTerm2をダウンロー丼してインスコしてください。


iTerm2 - Mac OS Terminal Replacement


設定などはそんなにいじってないけど、基本はウィンドウを5枚くらいあげていて、タブとか使わないし存在意義もよくわからないので、cmd + 数字キーでウィンドウを切り替えられるようにした。


f:id:yuroyoro:20120211114742p:image


あと、設定したフォントによっては、vimのステータスラインが再描画されなかったりするので、'Treat ambigous-width characters as double width'のチェックを外した。


f:id:yuroyoro:20120211114741p:image


俺は、あずきフォントS2Gうにフォントを愛用してますが、あまり人様にはおすすめできませぬ。

homebrew

パッケージ管理にはhomebrewを使います。macportsとかなにそれ?


Homebrew — MacPorts driving you to drink? Try Homebrew!


インスコは、ここに書いてあるとおり、以下のコマンドで。あ、XCode入れておいてね。

mkdir homebrew && curl -L https://github.com/mxcl/homebrew/tarball/master | tar xz --strip 1 -C homebrew


インスコが終わったら、とりあえず必要そうなアレをbrewで入れます。適当に列挙してありますので、必要に応じて。最低限、zsh git tmux tig ctags curl readline coreuilts proctools wget くらいは入れておきましょう。

brew install binutils cmake coreutils ctags curl gdbm gettext git glib imagemagick irssi jpeg libevent libffi libiconv libpng libtiff lv lynx ncftp neon nkf nmap parallel pcre pcre++ pip pkg-config potrace proctools readline tig tmux tree w3m wget zsh

zsh

もはやzshなしでは生きられない体になってしまってるので、zsh入れます。


【コラム】漢のzsh (1) 最強のシェル、それは「zsh」 | エンタープライズ | マイナビニュース


macだったら'brew install zsh'で入ります。設定などはgithubを見てください。わりとコメントも書いてあるので見れば分かるはず。


dotfiles/.zshrc at master · yuroyoro/dotfiles · GitHub


.zshrcは、本体の他に、oxs固有の設定を行う.zshrc.osxとlinuxで使う.zshrc.linuxに別れてます。あと、alias関係は.zshrc.aliasにまとめてあります。


zshを使っている一番の理由は、なんと言っても強力なコマンドライン補完です。例えば、以下の用に'vim zsh'まで入力してTABを押すと、一致するファイル名を補完してくれますし。


f:id:yuroyoro:20120211114731p:image


C-p, C-nでヒストリから途中まで入力したコマンドに一致するモノを検索してくれたり、gitのサブコマンドも補完してくれたりで、もう手放せません。


f:id:yuroyoro:20120211114730p:image


git

dotfilesもgithubで管理してるし、もはやgitが無いと何もできませんわ。'brew install git'で入ってるはず。


設定に関しては、.gitconfigと.gitignoreを見てください。


dotfiles/.gitconfig at master · yuroyoro/dotfiles · GitHub
dotfiles/.gitignore at master · yuroyoro/dotfiles · GitHub


あと、前にこんなエントリも書いたので参考までに。


.gitconfigに設定してるaliasなどのまとめ - ゆろよろ日記

入門git
入門git
posted with amazlet at 12.02.11
Travis Swicegood
オーム社
売り上げランキング: 20990


入門Git
入門Git
posted with amazlet at 12.02.11
濱野 純(Junio C Hamano)
秀和システム
売り上げランキング: 105390

git-now

git nowは、tempコマンドのための独自サブコマンドで、このgit nowで細かくコミットして、git rebase -iでコミットをまとめる、というスタイルで開発してます。


tmp コミットのための独自サブコマンド git-now - アジャイルSEを目指すブログ


'brew install https://github.com/iwata/git-now/raw/master/git-now.rb'で入ります。

tig

tigはコマンドラインから利用できるgit brwoserです。なんとなくログを見るのに便利です。


f:id:yuroyoro:20120211114739p:image


コンソールから使える git ブラウザ、tig が超便利 - #生存戦略 、それは - subtech
Tig(text-mode interface for git)を使う | Kwappa研究開発室


tigに関しては、ひとつ重要な設定があります。デフォルトのtigのkey-bindでは、'G'でgit gcが走ってしまって色々と取り返しがつかないことになるので、.gitconfigに以下の用に設定しておきます。

[tig "bind"]
  generic = g move-first-line
  generic = G move-last-line

tmux

ターミナルマルチプレクサtmuxです。今まではscreenを利用していたのですが、色々あって移行しました。


tmuxを使う一番の利点は、ssh接続がネットワークの不調で切れてしまったり、間違ってCmd+wを押してウィンドウを閉じてしまっても、元の作業状態にすぐに復元できる点です。なので、sshでサーバに入ってコード書くときも、macでコード書くときも必ずtmuxを使ってます。


.tmux.confをごにょごにょする - mizchi log


tmuxも、'brew install tmux'で入ります。で、設定ファイルは"~/.tmux.conf"です。


dotfiles/.tmux.conf at master · yuroyoro/dotfiles · GitHub


tmuxは、tmuxコマンドで起動します。


f:id:yuroyoro:20120211114729p:image


tmuxのデフォルトは緑生い茂るステータスバーですが、自分は青ベースに設定しました。


プレフィックスキーをtに設定しています。その他のキーバインドもほぼscreen互換になるように設定してます。なので、&tl;Ctrl-t>の後にcで新しいウィンドウを生成、<Ctrl-c><Space>で次のウィンドウへ、<Ctrl-c><BS>で前のウィンドウへ移動します。


tmuxのキーバインド(プレフィックスキー:t)は、このような設定しました。

キーバインド コマンド
C-t ? ショートカットキーのリストを表示
C-t c 新しいウィンドウを作成
C-t n 次のウィンドウへ移動
C-t SPACE 次のウィンドウへ移動
C-t p 前のウィンドウへ移動
C-t BS 前のウィンドウへ移動
C-t w ウィンドウの選択メニューを表示
C-t d セッションのデタッチ
C-t : コマンドプロンプトの開始
C-t [ コピーモードの開始
C-t ] バッファ内容のペースト
C-t q ペインのインジケータを表示
C-t % ウィンドウを左右のペインに分割
C-t o 次のペインへ移動
C-t { ペインの入れ替え
C-t } ペインの入れ替え(逆順)
C-t l ペインの左右分割位置を左へ移動
C-t h ペインの左右分割位置を右へ移動
C-t x ペインの破棄


あと、copy-modeに入るのには<Ctrl-t>]なのですが、デフォルトの設定では<Ctrl-t>を押した後にControllキーから指を離して[を押す必要があって、素早くcopy-modeに入れません。なので、Controllキーから指を離さずに[を押してもcopy-modeに入れるように設定してあります。

# copy-mode ^[
unbind ^"["
bind -r ^"[" copy-mode
unbind ^]
bind -r ^] paste-buffer


mac osxでは、tmuxとクリップボードの連携に一手間必要なので、以下の記事を参考に、 reattach-to-user-namespaceコマンドを導入します。


Mac の tmux でクリップボードを使う。 - こせきの技術日記


しかし、.tmux.confに以下の用に.tmux.confに書いてしまうと、linux環境でtmuxが起動しなくなってしまいます。

# コレを.tmux.confに書いてしまうとlinux環境で使えなくなる……
set-option -g default-command "reattach-to-user-namespace -l zsh"


そこで、osxの時だけ上記の設定を行うラッパーコマンドtmuxxを導入します。


tmux wrapper script — Gist


このコマンドを~/binなどPATHの通った場所に実行権を与えて配置しておき、.zshrcなどでtmuxにaliasを設定します。これで、osxのときだけ"reattach-to-user-namespace"が有効になります。

# tmux
alias tmux='tmuxx'
alias tm='tmuxx'
alias tma='tmux attach'
alias tml='tmux list-window'


.tmux.confについては、以下も参考にしました。


.tmux.confをごにょごにょする - mizchi log
dotfiles/.tmux.conf at master · tokorom/dotfiles · GitHub

Vim

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


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



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 "$@"'
.vimrcについて

じゃあ、肝心のvimの設定に入ります。


そのまえに、「Vim テクニックバイブル」を買いましょう。Vim使いならこの本は持ってないとダメです。




で、俺の.vimrcはここで公開していて、コメントもできるだけ書いてあるのでまぁ参考にしてください。


みてわかるとおり、設定自体はは分割されていて、.vimrc本体からそれぞれの設定ファイルを読み込む形になってます。


dotfiles/.vimrc at master · yuroyoro/dotfiles · GitHub

"vunlde.vimで管理してるpluginを読み込む
source ~/dotfiles/.vimrc.bundle

"基本設定
source ~/dotfiles/.vimrc.basic
"StatusLine設定
source ~/dotfiles/.vimrc.statusline
"インデント設定
source ~/dotfiles/.vimrc.indent
"表示関連
source ~/dotfiles/.vimrc.apperance
"補完関連
source ~/dotfiles/.vimrc.completion
"Tags関連
source ~/dotfiles/.vimrc.tags
"検索関連
source ~/dotfiles/.vimrc.search
"移動関連
source ~/dotfiles/.vimrc.moving
"Color関連
source ~/dotfiles/.vimrc.colors
"編集関連
source ~/dotfiles/.vimrc.editing
"エンコーディング関連
source ~/dotfiles/.vimrc.encoding
"その他
source ~/dotfiles/.vimrc.misc
"プラグインに依存するアレ
source ~/dotfiles/.vimrc.plugins_setting
プラグイン管理にvundle.vimを使う

以前はpathogen.vimを使っていたのですが、vundle.vimに乗り換えました。今ならneovundleのほうがいいかも?


Vim-users.jp - Hack #215: Vundle で plugin をモダンに管理する
gmarik/vundle · GitHub
Vim-users.jp - Hack #238: neobundle.vim で plugin をモダンに管理する


vundleは基本的にpathogen.vimと同様に、.vim/bundleに以下にプラグインを放り込むようになっています。pathogen.vimと異なるのは、gitのsubmoduleではなく、明示的に.vimrcにBundle 'plugin-name'のように利用するプラグインを指定するようになっている点です。.vimrcでコメントアウトすることで、気軽にプラグインの有効/無効を切り替えることが可能です。

"vunlde.vimで管理してるpluginを読み込む

filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" Edit {{{
  " NERD_commenter.vim :最強コメント処理 (<Leader>c<space>でコメントをトグル)
  Bundle 'scrooloose/nerdcommenter.git'

  " 自動閉じタグ
  " Bundle 'yuroyoro/vim-autoclose'

  " -- でメソッドチェーン整形
  Bundle 'c9s/cascading.vim'


vundleの導入は、.vimディレクトリにgit cloneするだけです。vundleが有効になった状態で、コマンドで"BundleInstall plugin-name"と指定する事で、vim-script.orgやgithubからプラグインをダウンロードします。

f:id:yuroyoro:20120211114727p:image
f:id:yuroyoro:20120211114726p:image

補完にneocomplecacheを使う

vimでの補完と言えば、AutoComplePopが有名ですが、今は色々と高機能なneocomplecache.vimを使っています。


neocomplecacheの使い方や設定は、VimテクニックバイブルやVim-users.jp - neocomplcacheなどに詳しく解説があるので省きます。自分は、Scala用のディクショナリを設定してscalaのLibraryからクラス名などが補完されるようにしています。


f:id:yuroyoro:20101104224756p:image


neocomplecache関連の設定ファイルはコレです。


404 · GitHub


unite.vim

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


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


f:id:yuroyoro:20101104224759p:image


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


f:id:yuroyoro:20101104224800p:image


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


f:id:yuroyoro:20101104225130p:image


自分は、uniteのプレフィックスキーはfに設定しています。ノーマルモードでfmを押すと、最近使ったファイルが一覧ででます。他にもffでカレントディレクトリ以下から、fdでそのバッファのあるディレクトリからファイルを選択できるようにしてます。


f:id:yuroyoro:20120211114738p:image

nnoremap    [unite]   <Nop>
nmap    f [unite]

" 分割しないでuniteのbufferを表示する
nnoremap [unite]u  :<C-u>Unite -no-split<Space>

" 全部乗せ
nnoremap <silent> [unite]a  :<C-u>UniteWithCurrentDir -no-split -buffer-name=files buffer file_mru bookmark file<CR>
" ファイル一覧
nnoremap <silent> [unite]f  :<C-u>Unite -no-split -buffer-name=files file<CR>
" バッファ一覧
nnoremap <silent> [unite]b  :<C-u>Unite -no-split buffer<CR>
" 常用セット
nnoremap <silent> [unite]u  :<C-u>Unite -no-split buffer file_mru<CR>
" 最近使用したファイル一覧
nnoremap <silent> [unite]m  :<C-u>Unite -no-split file_mru<CR>
" 現在のバッファのカレントディレクトリからファイル一覧
nnoremap <silent> [unite]d  :<C-u>UniteWithBufferDir -no-split file<CR>


通常は、uniteのバッファは新しいウィンドウが作成されて開くのですが、縦分割してたりtaglist.vimのウィンドウが出てたり、MiniBufferExplorerがあったりすると、uniteのウィンドウを閉じた後のウィンドウサイズがうまく復元されませんでした。なので、今カーソルのあるウィンドウを再利用してuniteのバッファを出すように、--no-splitオプションをつけています。

vim-powerlineでカッコイイステータスラインを使う

Lokaltog/vim-powerline · GitHub


今回、iTerm2に移行したのは、このvim-poewlineがTerminal.appでは上手く表示されないからです。このvim-poewlineを導入すると、こんな感じでステータスラインがカッコよくなります。

ノーマルモード:
f:id:yuroyoro:20120211114737p:image

インサートモード:
f:id:yuroyoro:20120211114736p:image


ヴィジュアルモード:
f:id:yuroyoro:20120211114735p:image


このように、モードによって色が変わったりもします。カコイイ。


ですが、このような表示するには、フォントにパッチを当てる必要があります。githubのwikiに方法が書いてあるので、基本的になこの通りに普段使ってるフォントにパッチを当てればオーケーです。


また、すでにパッチ適用済みのフォントも配付されています。面倒であればこれらを使うのがよいでしょう。


Patched fonts · Lokaltog/vim-powerline Wiki · GitHub


では、パッチ適用の手順です。俺は あずきフォントS2Gうにフォントにパッチを当てました。ふつうにプログラミングにつかうなら、Rictyなんかがいいんじゃないかと思います。



【Vim】Powerline でリッチなステータスラインを使う
- blog.remora.cx


この記事では、cygwin環境での方法が書いてあります。mac osxでは、以下の手順でパッチを当てます。

fontforgeをインストールする

brew install fontforge


githubにあるvim-powerlineをcloneする

git clone https://github.com/Lokaltog/vim-powerline.git


fontpatcherで、好みのフォントにパッチをあてる

cd vim-powerline/fontpatcher
./fontpatcher MyFontFile.ttf


パッチをあてるとfont名-Poewline.ttfとかいうファイル名でパッチをあてたフォントファイルが生成されるので、それをフォントディレクトリにコピーするなり、Fontbookでインストールするナリします。

cp MyFontFile-Powerline.otf ~/Library/Fonts


で、パッチを当てたフォントを使用するように、iTerm2に設定します。


f:id:yuroyoro:20120211114734p:image


あとは、.vimrcに以下の設定を加えればオーケーです。

let g:Powerline_symbols = 'fancy'
taglist.vim

taglist.vim : ソースコード上のメソッド宣言、変数宣言の一覧を表示 — 名無しのvim使い


taglist.vimは、ctagsの結果をアウトラインとして表示してくれるプラグインです。このように表示されます。


f:id:yuroyoro:20120211114725p:image


mac osxにデフォルトで入ってるctagsは、Exuberant Ctagsではないので、そのままではtaglist.vimを利用できません。brewでctagsをインストールし、デフォルトの/usr/bin/ctags は削除するなりしてしまいましょう。

vimshell

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


f:id:yuroyoro:20101104225131p:image


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


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


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

その他のプラグイン

導入しているプラグインは、.vimrc.bundleに書いてあります。

dotfiles/.vimrc.bundle at master · yuroyoro/dotfiles · GitHub

"vunlde.vimで管理してるpluginを読み込む

filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" Edit {{{
  " NERD_commenter.vim :最強コメント処理 (<Leader>c<space>でコメントをトグル)
  Bundle 'scrooloose/nerdcommenter.git'

  " 自動閉じタグ
  " Bundle 'yuroyoro/vim-autoclose'

  " -- でメソッドチェーン整形
  Bundle 'c9s/cascading.vim'

  " visually indent guide
  Bundle 'nathanaelkane/vim-indent-guides'

  " XMLとかHTMLとかの編集機能を強化する
  Bundle 'xmledit'

  " Align : 高機能整形・桁揃えプラグイン
  Bundle 'Align'

  " フィルタリングと整形
  Bundle 'godlygeek/tabular'

  " マルチバイト対応の整形
  Bundle 'h1mesuke/vim-alignta'

  " YankRing.vim : ヤンクの履歴を管理し、順々に参照、出力できるようにする
  Bundle 'YankRing.vim'

  " undo履歴を追える (need python support)
  Bundle 'Gundo'

  " surround.vim : テキストを括弧で囲む/削除する
  Bundle 'tpope/surround.vim'

  " smartchr.vim : ==などの前後を整形
  Bundle 'smartchr'

  " vim-operator-user : 簡単にoperatorを定義できるようにする
  Bundle 'operator-user'

  " operator-camelize : camel-caseへの変換
  Bundle 'operator-camelize'

  " operator-replace : yankしたものでreplaceする
  Bundle 'operator-replace'

  " textobj-user : 簡単にVimエディタのテキストオブジェクトをつくれる
  Bundle 'textobj-user'

  " vim-textobj-syntax : syntax hilightされたものをtext-objectに
  Bundle 'kana/vim-textobj-syntax.git'

  " vim-textobj-plugins : いろんなものをtext-objectにする
  Bundle 'thinca/vim-textobj-plugins.git'

  " vim-textobj-lastpat : 最後に検索されたパターンをtext-objectに
  Bundle 'kana/vim-textobj-lastpat.git'

  " vim-textobj-indent : インデントされたものをtext-objectに
  Bundle 'kana/vim-textobj-indent.git'

  " vim-textobj-function : 関数の中身をtext-objectに
  Bundle 'kana/vim-textobj-function.git'

  " vim-textobj-fold : 折りたたまれたアレをtext-objectに
  Bundle 'kana/vim-textobj-fold.git'
  Bundle 'textobj-rubyblock'

  " vim-textobj-entire : buffer全体をtext-objectに
  Bundle 'textobj-entire'

  " 「foo」 or 【bar】などをtext-objectに
  Bundle 'textobj-jabraces'

  " 改造したmonday.vim(git rebase -i とかtrue/falseとか)
  " Bundle 'yuroyoro/monday'

  " <C-a>でtrue/false切替。他色々
  Bundle 'taku-o/vim-toggle'

" }}}

" Completion {{{
  " 補完 autocomplpop.vim : insertmodeで自動で補完をpopup
  " Bundle 'AutoComplPop'

  " 補完 neocomplcache.vim : 究極のVim的補完環境
  Bundle 'Shougo/neocomplcache'

  " rubyでrequire先を補完する
  " Bundle 'ujihisa/neco-ruby'

  " A neocomplcache plugin for English, using look command
  " Bundle 'ujihisa/neco-look'
" }}}

" Searching/Moving{{{
  " smooth_scroll.vim : スクロールを賢く
  Bundle 'Smooth-Scroll'

  " vim-smartword : 単語移動がスマートな感じで
  Bundle 'smartword'

  " camelcasemotion : CamelCaseやsnake_case単位でのワード移動
  Bundle 'camelcasemotion'

  " <Leader><Leader>w/fなどで、motion先をhilightする
  Bundle 'EasyMotion'

  " matchit.vim : 「%」による対応括弧へのカーソル移動機能を拡張
  Bundle 'matchit.zip'

  " ruby用のmatchit拡張
  Bundle 'ruby-matchit'

  " grep.vim : 外部のgrep利用。:Grepで対話形式でgrep :Rgrepは再帰
  Bundle 'grep.vim'

  " eregex.vim : vim正規表現rubyperl正規表現な入力でできる :%S/perlregex/
  Bundle 'eregex.vim'

  " open-browser.vim : カーソルの下のURLを開くor単語を検索エンジンで検索
  Bundle 'tyru/open-browser.vim'

" }}}

" Programming {{{
  " quickrun.vim : 編集中のファイルを簡単に実行できるプラグイン
  Bundle 'thinca/vim-quickrun'

  " perldocやphpmanual等のリファレンスをvim上で見る
  Bundle 'thinca/vim-ref'

  " SQLUtilities : SQL整形、生成ユーティリティ
  Bundle 'SQLUtilities'

  " vim-ruby : VimRubyを扱う際の最も基本的な拡張機能
  Bundle 'ruby.vim'

  " rails.vim : rails的なアレ
  Bundle 'tpope/vim-rails'

  " Pydiction : Python用の入力補完
  Bundle 'Pydiction'

  " ソースコード上のメソッド宣言、変数宣言の一覧を表示
  Bundle 'taglist.vim'

  " tagsを利用したソースコード閲覧・移動補助機能 tagsファイルの自動生成
  Bundle 'Source-Explorer-srcexpl.vim'

  " NERD_tree, taglist, srcexpl の統合
  Bundle 'trinity.vim'
" }}}
"
" Syntax {{{
  " haml
  Bundle 'haml.zip'

  " JavaScript
  Bundle 'JavaScript-syntax'

  " jQuery
  Bundle 'jQuery'

  " nginx conf
  Bundle 'nginx.vim'

  " markdown
  Bundle 'tpope/vim-markdown'

  " coffee script
  Bundle 'kchmck/vim-coffee-script'

  " python
  Bundle 'yuroyoro/vim-python'

  " scala
  Bundle 'yuroyoro/vim-scala'

  " syntax checking plugins exist for eruby, haml, html, javascript, php, python, ruby and sass.
  Bundle 'scrooloose/syntastic'
" }}}

" Buffer {{{
  " DumbBuf.vim : quickbufっぽくbufferを管理。 "<Leader>b<Space>でBufferList
  Bundle 'DumbBuf'

  " minibufexpl.vim : タブエディタ風にバッファ管理ウィンドウを表示
  Bundle 'minibufexpl.vim'

  " NERDTree : ツリー型エクスプローラ
  Bundle 'The-NERD-tree'

  " vtreeexplorer.vim : ツリー状にファイルやディレクトリの一覧を表示
  Bundle 'vtreeexplorer'
" }}}


" Encording {{{
  Bundle 'banyan/recognize_charcode.vim'
" }}}

" Utility {{{

  " vimshell : vimのshell
  Bundle 'Shougo/vimshell.git'

  " vimproc : vimから非同期実行。vimshelleで必要
  Bundle 'Shougo/vimproc.git'

  " vim-altercmd : Ex command拡張
  Bundle 'tyru/vim-altercmd'

  " vim Interface to Web API
  Bundle 'mattn/webapi-vim'

  " cecutil.vim : 他のpluginのためのutillity1
  Bundle 'cecutil'

  " urilib.vim : vim scriptからURLを扱うライブラリ
  Bundle 'tyru/urilib'

  " ステータスラインに顔文字を表示
  " Bundle 'mattn/hahhah-vim'

  " utillity
  Bundle 'L9'

  " Buffer管理のLibrary
  Bundle 'thinca/vim-openbuf'

  " vimdoc 日本語
  Bundle 'yuroyoro/vimdoc_ja'

  " vim上のtwitter client
  Bundle 'TwitVim'

  " Lingrのclient
  Bundle 'tsukkee/lingr-vim'

  " vimからGit操作する
  Bundle 'tpope/vim-fugitive'

  " ステータスラインをカッコよくする
  Bundle 'Lokaltog/vim-powerline'


" }}}

" ColorSchema{{{{
  " color schema 256
  Bundle 'desert256.vim'
  Bundle 'mrkn256.vim'
  Bundle 'tomasr/molokai'
  Bundle 'yuroyoro/yuroyoro256.vim'
" }}}

" Unite {{{{
  " unite.vim : - すべてを破壊し、すべてを繋げ - vim scriptで実装されたanythingプラグイン
  Bundle 'Shougo/unite.vim'
  Bundle 'tsukkee/unite-help'
  Bundle 'h1mesuke/unite-outline'
  " Bundle 'Sixeight/unite-grep'
  Bundle 'basyura/unite-rails'
  Bundle 'thinca/vim-unite-history'
  Bundle 'tsukkee/unite-tag'
  Bundle 'choplin/unite-vim_hacks'

" }}}
"
Bundle 'gmarik/vundle'

filetype plugin indent on
その他オヌヌメのvim設定

以前書いた記事からサルベージした、特にオヌヌメの設定を紹介しますぁ。

カーソル行のハイライト

ふつーに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 <ESC><ESC> ;nohlsearch<CR><ESC>
.vimrc<e3><82><92>"nnoremap"で検索したときで、

f:id:yuroyoro:20101104223736p:image

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

f:id:yuroyoro:20101104223737p:image

helpを素早くひく

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

" Ctrl-iでヘルプ
nnoremap <C-i>  :<C-u>help<Space>
" カーソル下のキーワードをヘルプでひく
nnoremap <C-i><C-i> :<C-u>help<Space><C-r><C-w><Enter>
保存時の空白除去

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

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

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

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

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

" CTRL-hjklでウィンドウ移動
nnoremap <C-j> :<C-w>j
nnoremap <C-k> :<C-k>j
nnoremap <C-l> :<C-l>j
nnoremap <C-h> :<C-h>j

最後に

ターミナルでのCLI作業は、慣れるとものすごく快適になって離れられなくなります。なにより、一度憶えてしまえば大抵の環境で作業できるようになります。


zshもtmuxもvimもgitも、スポーツと同じく反復練習で体に憶えさせる必要があります。辛抱強く使っていれば、考える前に勝手に指が動くようになってるので、今まで敬遠していた人もあきらめずに頑張ってみてください。俺も、まだまだ精進しますので。

とっておきのgit設定


このクソ長い記事を最後までよんでくださった方に、gitでの生産性が1000倍に向上するとっておきの設定をお教えします!!!!


このようにaliasを設定します。これだけ!!!

alias oppai='git'


すると、'oppai show'とか!!!
f:id:yuroyoro:20120211114724p:image

'oppai fetch'とか!!!
f:id:yuroyoro:20120211114723p:image


'oppai pull --prune'とか!!!
f:id:yuroyoro:20120211114722p:image


素晴らしいデスね????!!!!!!1111

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

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