Mac OSXでのvim環境整理。.vimrcやらオヌヌメPlug inやらまとめ。 – ゆろよろ日記

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

Add Staryuitowest (green)

wkoichi (green)

shuji_w6e

16

Cliche

vim, mac | 23:06 |  Mac OSXでのvim環境整理。.vimrcやらオヌヌメPlug inやらまとめ。 - ゆろよろ日記 を含むブックマーク

 Mac OSXでのvim環境整理。.vimrcやらオヌヌメPlug inやらまとめ。 - ゆろよろ日記 のブックマークコメント | Twitter

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 – Project Hosting on Google Code

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

export EDITOR=/Applications/MacVim.app/Contents/MacOS/Vimalias 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’s 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=underlinehighlight CursorLine ctermbg=black guibg=black

こんなように、右側のみに罫線がでるようになります。わかりにくいかもしれませんが、右のウィンドウに罫線が引かれてます。

f:id:yuroyoro:20101104223735p:image

検索ハイライトの消去

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

"Escの2回押しでハイライト消去nmap <ESC><ESC> ;nohlsearch<CR><ESC>

.vimrcを”nnoremap”で検索したときで、

f:id:yuroyoro:20101104223736p:image

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

f:id:yuroyoro:20101104223737p:image

helpを素早くひく

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

" 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 ; :noremap : ;
ウィンドウ移動を楽に

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

" CTRL-hjklでウィンドウ移動nnoremap <C-j> ;<C-w>jnnoremap <C-k> ;<C-k>jnnoremap <C-l> ;<C-l>jnnoremap <C-h> ;<C-h>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させるために一度ファイルタイプ判定をofffiletype off" pathogen.vimによってbundle配下のpluginをpathに加えるcall pathogen#runtime_append_all_bundles()call pathogen#helptags()set helpfile=$VIMRUNTIME/doc/help.txt" ファイルタイプ判定をonfiletype 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

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

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

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

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

f:id:yuroyoro:20101104223742p:image

<Leader>c<Space>すると、

f:id:yuroyoro:20101104223743p:image

このようにコメントアウトできます。もう一度選択して <Leader>c<Space>するとコメント解除です。色々なファイルタイプに対応していて、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の結果がウィンドウ分割されて表示され、カーソル行でリターンを押すとそのバッファやファイルに飛ぶことができます。

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

" :Gb <args> でGrepBufferするcommand! -nargs=1 Gb :GrepBuffer <args>" カーソル下の単語をGrepBufferするnnoremap <C-g><C-b> :<C-u>GrepBuffer<Space><C-r><C-w><Enter>
minibufexpl.vim

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

f:id:yuroyoro:20101104224758p:image

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

"------------------------------------" MiniBufExplorer"------------------------------------"set minibfexplet g:miniBufExplMapWindowNavVim=1 "hjklで移動let g:miniBufExplSplitBelow=0  " Put new window abovelet g:miniBufExplMapWindowNavArrows=1let g:miniBufExplMapCTabSwitchBufs=1let g:miniBufExplModSelTarget=1let g:miniBufExplSplitToEdge=1let 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’s dotfiles – GitHub

管理系
表示系
編集系
検索系
バッファ管理系
ファイル系
その他
開発系

.vimrc

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

yuroyoro’s dotfiles at master – 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=aset guioptions+=aset ttymouse=xterm2"ヤンクした文字は、システムのクリップボードに入れる"set clipboard=unnamed" 挿入モードでCtrl+kを押すとクリップボードの内容を貼り付けられるようにする "imap <C-K>  <ESC>"*pa" Ev/Rvでvimrcの編集と反映command! Ev edit $MYVIMRCcommand! Rv source $MYVIMRC" pathogenでftdetectなどをloadさせるために一度ファイルタイプ判定をofffiletype off" pathogen.vimによってbundle配下のpluginをpathに加えるcall pathogen#runtime_append_all_bundles()call pathogen#helptags()set helpfile=$VIMRUNTIME/doc/help.txt" ファイルタイプ判定をonfiletype 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%8Pelse  set statusline=%<[%n]%m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).':'.&ff.']'}%y %f%=[%{GetB()}] %l,%c%V%8Pendif"入力モード時、ステータスラインのカラーを変更augroup InsertHookautocmd!autocmd InsertEnter * highlight StatusLine guifg=#ccdc90 guibg=#2E4340autocmd InsertLeave * highlight StatusLine guifg=#2E4340 guibg=#ccdc90augroup ENDfunction! 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 rendfunc" 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 outendfunc"-------------------------------------------------------------------------------" 表示 Apperance"-------------------------------------------------------------------------------set showmatch         " 括弧の対応をハイライトset number            " 行番号表示set list              " 不可視文字表示set listchars=tab:>.,trail:_,extends:>,precedes:< " 不可視文字の表示形式set display=uhex      " 印字不可能文字を16進数で表示" 全角スペースの表示highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=darkgraymatch ZenkakuSpace / /" カーソル行をハイライトset cursorline" カレントウィンドウにのみ罫線を引くaugroup cch  autocmd! cch  autocmd WinLeave * set nocursorline  autocmd WinEnter,BufRead * set cursorlineaugroup END:hi clear CursorLine:hi CursorLine gui=underlinehighlight 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=0if 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=<tab>         " コマンド補完を開始するキーset wildmode=list:full     " リスト表示,最長マッチset history=1000           " コマンド・検索パターンの履歴数set complete+=k            " 補完に辞書ファイル追加"<c-space>でomni補完" imap <c-space> <c-x><c-o>" -- tabでオムニ補完function! InsertTabWrapper()  if pumvisible()    return "<c-n>"  endif  let col = col('.') - 1  if !col || getline('.')[col -1] !~ 'k|<|/'    return "<tab>"  elseif exists('&omnifunc') && &omnifunc == ''    return "<c-n>"  else    return "<c-x><c-o>"  endifendfunctioninoremap <tab> <c-r>=InsertTabWrapper()<cr>"-------------------------------------------------------------------------------" タグ関連 Tags"-------------------------------------------------------------------------------" set tagsif has("autochdir")  " 編集しているファイルのディレクトリに自動で移動  set autochdir  set tags=tags;else  set tags=./tags,./../tags,./*/tags,./../../tags,./../../../tags,./../../../../tags,./../../../../../tagsendif"<C-t>はscreentとかぶるので削除"tab pagesを使い易くする" nnoremap <C-t>  <Nop>" nnoremap <C-t>n  ;<C-u>tabnew<CR>" nnoremap <C-t>c  ;<C-u>tabclose<CR>" nnoremap <C-t>o  ;<C-u>tabonly<CR>" nnoremap <C-t>j  ;<C-u>execute 'tabnext' 1 + (tabpagenr() + v:count1 - 1) % tabpagenr('$')<CR>" nnoremap <C-t>k  gT"tags-and-searchesを使い易くするnnoremap t  <Nop>"「飛ぶ」nnoremap tt  <C-]>"「進む」nnoremap tj  ;<C-u>tag<CR>"「戻る」nnoremap tk  ;<C-u>pop<CR>"履歴一覧nnoremap tl  ;<C-u>tags<CR>"-------------------------------------------------------------------------------" 検索設定 Search"-------------------------------------------------------------------------------set wrapscan   " 最後まで検索したら先頭へ戻るset ignorecase " 大文字小文字無視set smartcase  " 検索文字列に大文字が含まれている場合は区別して検索するset incsearch  " インクリメンタルサーチset hlsearch   " 検索文字をハイライト"Escの2回押しでハイライト消去nmap <ESC><ESC> ;nohlsearch<CR><ESC>"選択した文字列を検索vnoremap <silent> // y/<C-R>=escape(@", '\/.*$^~[]')<CR><CR>"選択した文字列を置換vnoremap /r "xy;%s/<C-R>=escape(@x, '\/.*$^~[]')<CR>//gc<Left><Left><Left>"s*置換後文字列/g<Cr>でカーソル下のキーワードを置換nnoremap <expr> s* ':%substitute/<' . expand('<cword>') . '>/'" Ctrl-iでヘルプnnoremap <C-i>  :<C-u>help<Space>" カーソル下のキーワードをヘルプでひくnnoremap <C-i><C-i> :<C-u>help<Space><C-r><C-w><Enter>" :Gb <args> でGrepBufferするcommand! -nargs=1 Gb :GrepBuffer <args>" カーソル下の単語をGrepBufferするnnoremap <C-g><C-b> :<C-u>GrepBuffer<Space><C-r><C-w><Enter>"-------------------------------------------------------------------------------" 移動設定 Move"-------------------------------------------------------------------------------" カーソルを表示行で移動する。論理行移動は<C-n>,<C-p>nnoremap h <Left>nnoremap j gjnnoremap k gknnoremap l <Right>nnoremap <Down> gjnnoremap <Up>   gk" 0, 9で行頭、行末へnmap 1 0nmap 0 ^nmap 9 $" insert mode での移動imap  <C-e> <END>imap  <C-a> <HOME>" インサートモードでもhjklで移動(Ctrl押すけどね)imap <C-j> <Down>imap <C-k> <Up>imap <C-h> <Left>imap <C-l> <Right>"<space>j, <space>kで画面送りnoremap <Space>j <C-f>noremap <Space>k <C-b>" spaceで次のbufferへ。back-spaceで前のbufferへnmap <Space> ;MBEbn<CR>nmap <BS> ;MBEbp<CR>" F2で前のバッファmap <F2> <ESC>;bp<CR>" F3で次のバッファmap <F3> <ESC>;bn<CR>" F4でバッファを削除するmap <F4> <ESC>;bw<CR>"フレームサイズを怠惰に変更するmap <kPlus> <C-W>+map <kMinus> <C-W>-" 前回終了したカーソル行に移動autocmd BufReadPost * if line("'"") > 0 && line("'"") <= line("$") | exe "normal g`"" | endif" 最後に編集された位置に移動nnoremap gb '[nnoremap gp ']" 対応する括弧に移動nnoremap [ %nnoremap ] %" 最後に変更されたテキストを選択するnnoremap gc  `[v`]vnoremap gc ;<C-u>normal gc<Enter>onoremap gc ;<C-u>normal gc<Enter>" カーソル位置の単語をyankするnnoremap vy vawy" 矩形選択で自由に移動するset virtualedit+=block"ビジュアルモード時vで行末まで選択vnoremap v $h" CTRL-hjklでウィンドウ移動nnoremap <C-j> ;<C-w>jnnoremap <C-k> ;<C-k>jnnoremap <C-l> ;<C-l>jnnoremap <C-h> ;<C-h>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=japanendifif has('iconv')  let s:enc_euc = 'euc-jp'  let s:enc_jis = 'iso-2022-jp'  " iconvがeucJP-msに対応しているかをチェック  if iconv("x87x64x87x6a", 'cp932', 'eucjp-ms') ==# "xadxc5xadxcb"    let s:enc_euc = 'eucjp-ms'    let s:enc_jis = 'iso-2022-jp-3'  " iconvがJISX0213に対応しているかをチェック  elseif iconv("x87x64x87x6a", 'cp932', 'euc-jisx0213') ==# "xadxc5xadxcb"    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_jisendif" 日本語を含まない場合は 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=doubleendif" cvsの時は文字コードをeuc-jpに設定autocmd FileType cvs :set fileencoding=euc-jp" 以下のファイルの時は文字コードをutf-8に設定autocmd FileType svn :set fileencoding=utf-8autocmd FileType js :set fileencoding=utf-8autocmd FileType css :set fileencoding=utf-8autocmd FileType html :set fileencoding=utf-8autocmd FileType xml :set fileencoding=utf-8autocmd FileType java :set fileencoding=utf-8autocmd 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=cp932command! Eucjp edit ++enc=euc-jpcommand! Iso2022jp edit ++enc=iso-2022-jpcommand! Utf8 edit ++enc=utf-8command! Jis Iso2022jpcommand! 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%dmelseif &term =~ "xterm-color" set t_Co=8 set t_Sf=^[[3%dm set t_Sb=^[[4%dmendif"ポップアップメニューのカラーを設定"hi Pmenu guibg=#666666"hi PmenuSel guibg=#8cd0d3 guifg=#666666"hi PmenuSbar guibg=#333333" ハイライト onsyntax enable" 補完候補の色づけ for vim7hi Pmenu ctermbg=white ctermfg=darkgrayhi PmenuSel ctermbg=blue ctermfg=whitehi PmenuSbar ctermbg=0 ctermfg=9"-------------------------------------------------------------------------------" 編集関連 Edit"-------------------------------------------------------------------------------" insertモードを抜けるとIMEオフset noimdisableset iminsert=0 imsearch=0set noimcmdlineinoremap <silent> <ESC> <ESC>:set iminsert=0<CR>" yeでそのカーソル位置にある単語をレジスタに追加nmap ye ;let @"=expand("<cword>")<CR>" Visualモードでのpで選択範囲をレジスタの内容に置き換えるvnoremap p <Esc>;let current_reg = @"<CR>gvdi<C-R>=current_reg<CR><Esc>" Tabキーを空白に変換set expandtab" コンマの後に自動的にスペースを挿入inoremap , ,<Space>" XMLの閉タグを自動挿入augroup MyXML  autocmd!  autocmd Filetype xml inoremap <buffer> </ </<C-x><C-o>augroup END"  Insert mode中で単語単位/行単位の削除をアンドゥ可能にするinoremap <C-u>  <C-g>u<C-u>inoremap <C-w>  <C-g>u<C-w>" :Ptでインデントモード切替command! Pt :set paste!" y9で行末までヤンクnmap y9 y$" y0で行頭までヤンクnmap y0 y^"" 括弧を自動補完"inoremap { {}<LEFT>"inoremap [ []<LEFT>"inoremap ( ()<LEFT>"inoremap " ""<LEFT>"inoremap ' ''<LEFT>"vnoremap { "zdi^V{<C-R>z}<ESC>"vnoremap [ "zdi^V[<C-R>z]<ESC>"vnoremap ( "zdi^V(<C-R>z)<ESC>"vnoremap " "zdi^V"<C-R>z^V"<ESC>"vnoremap ' "zdi'<C-R>z'<ESC>" 保存時に行末の空白を除去するautocmd BufWritePre * :%s/s+$//ge" 保存時にtabをスペースに変換するautocmd BufWritePre * :%s/t/  /ge" 日時の自動入力inoremap <expr> ,df strftime('%Y/%m/%d %H:%M:%S')inoremap <expr> ,dd strftime('%Y/%m/%d')inoremap <expr> ,dt strftime('%H:%M:%S')"-------------------------------------------------------------------------------" その他 Misc"-------------------------------------------------------------------------------" ;でコマンド入力( ;と:を入れ替)noremap ; :noremap : ;"-------------------------------------------------------------------------------" プラグインごとの設定 Plugins"-------------------------------------------------------------------------------"------------------------------------" YankRing.vim"------------------------------------" Yankの履歴参照nmap ,y ;YRShow<CR>"------------------------------------" MiniBufExplorer"------------------------------------"set minibfexplet g:miniBufExplMapWindowNavVim=1 "hjklで移動let g:miniBufExplSplitBelow=0  " Put new window abovelet g:miniBufExplMapWindowNavArrows=1let g:miniBufExplMapCTabSwitchBufs=1let g:miniBufExplModSelTarget=1let g:miniBufExplSplitToEdge=1let 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"<Leader>xでコメントをトグル(NERD_commenter.vim)map <Leader>x, c<space>""未対応ファイルタイプのエラーメッセージを表示しないlet NERDShutUp=1" ------------------------------------" grep.vim"------------------------------------" 検索外のディレクトリ、ファイルパターンlet Grep_Skip_Dirs = '.svn .git .hg'let Grep_Skip_Files = '*.bak *~'-"------------------------------------" surround.vim"------------------------------------" s, ssで選択範囲を指定文字でくくる" nmap s <Plug>Ysurround" nmap ss <Plug>Yssurround" "------------------------------------" " smartchr.vim" "------------------------------------"" " 演算子の間に空白を入れる" inoremap <buffer><expr> + smartchr#one_of(' + ', ' ++ ', '+')" inoremap <buffer><expr> +=  smartchr#one_of(' += ')" " inoremap <buffer><expr> - smartchr#one_of(' - ', ' -- ', '-')" inoremap <buffer><expr> -=  smartchr#one_of(' -= ')" " inoremap <buffer><expr> / smartchr#one_of(' / ', ' // ', '/')" inoremap <buffer><expr> /=  smartchr#one_of(' /= ')" inoremap <buffer><expr> * smartchr#one_of(' * ', ' ** ', '*')" inoremap <buffer><expr> *=  smartchr#one_of(' *= ')" inoremap <buffer><expr> & smartchr#one_of(' & ', ' && ', '&')" inoremap <buffer><expr> % smartchr#one_of(' % ', '%')" inoremap <buffer><expr> =>  smartchr#one_of(' => ')" inoremap <buffer><expr> <-   smartchr#one_of(' <-  ')" inoremap <buffer><expr> <Bar> smartchr#one_of(' <Bar> ', ' <Bar><Bar> ', '<Bar>')" inoremap <buffer><expr> , smartchr#one_of(', ', ',')" " 3項演算子の場合は、後ろのみ空白を入れる" inoremap <buffer><expr> ? smartchr#one_of('? ', '?')" " inoremap <buffer><expr> : smartchr#one_of(': ', '::', ':')" " =の場合、単純な代入や比較演算子として入力する場合は前後にスペースをいれる。" " 複合演算代入としての入力の場合は、直前のスペースを削除して=を入力" inoremap <buffer><expr> = search('(&<bar><bar><bar>+<bar>-<bar>/<bar>><bar><) %#', 'bcn')? '<bs>= '  : search('(*<bar>!)%#', 'bcn') ? '= '  : smartchr#one_of(' = ', ' == ', '=')" " 下記の文字は連続して現れることがまれなので、二回続けて入力したら改行する" inoremap <buffer><expr> } smartchr#one_of('}', '}<cr>')" inoremap <buffer><expr> ; smartchr#one_of(';', ';<cr>')" "()は空白入れる" inoremap <buffer><expr> ( smartchr#one_of('( ')" inoremap <buffer><expr> ) smartchr#one_of(' )')" " if文直後の(は自動で間に空白を入れる" inoremap <buffer><expr> ( search('<if%#', 'bcn')? ' (': '('"------------------------------------" git.vim"------------------------------------let g:git_no_map_default = 1let g:git_command_edit = 'rightbelow vnew'nnoremap <Space>gd :<C-u>GitDiff --cached<Enter>nnoremap <Space>gD :<C-u>GitDiff<Enter>nnoremap <Space>gs :<C-u>GitStatus<Enter>nnoremap <Space>gl :<C-u>GitLog<Enter>nnoremap <Space>gL :<C-u>GitLog -u | head -10000<Enter>nnoremap <Space>ga :<C-u>GitAdd<Enter>nnoremap <Space>gA :<C-u>GitAdd <cfile><Enter>nnoremap <Space>gc :<C-u>GitCommit<Enter>nnoremap <Space>gC :<C-u>GitCommit --amend<Enter>nnoremap <Space>gp :<C-u>Git push"------------------------------------" BufExplorer"------------------------------------"<Leader>l<Space>でBufferListnnoremap <Leader>l<Space> :BufExplorer<CR>"------------------------------------" VTreeExplorer"------------------------------------let g:treeExplVertical=1"<Leader>t<Space>でディレクトリツリー表示noremap <Leader>t<Space> :VSTreeExplore<CR>"分割したウィンドウのサイズlet g:treeExplWinSize=30"------------------------------------" DumbBuf.vim"------------------------------------"<Leader>b<Space>でBufferListlet dumbbuf_hotkey = '<Leader>b<Space>'let dumbbuf_mappings = {     'n': {        '<Esc>': { 'opt': '<silent>', 'mapto': ':<C-u>close<CR>' }    }}let dumbbuf_single_key  = 1let dumbbuf_updatetime  = 1    " &updatetimeの最小値let dumbbuf_wrap_cursor = 0let dumbbuf_remove_marked_when_close = 1"------------------------------------" open-blowser.vim"------------------------------------" カーソル下のURLをブラウザで開くnmap fu <Plug>(openbrowser-open)vmap fu <Plug>(openbrowser-open)" カーソル下のキーワードをググるnnoremap fs :<C-u>OpenBrowserSearch<Space><C-r><C-w><Enter>"------------------------------------" operator-camelize.vim"------------------------------------" camel-caseへの変換map <Leader>u <Plug>(operator-camelize)map <Leader>U <Plug>(operator-decamelize)"------------------------------------" operator-replace.vim"------------------------------------" RwなどでYankしてるもので置き換えるmap R <Plug>(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 = 1if 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')endiffunction! g:my_chpwd(args, context)  call vimshell#execute('echo "chpwd"')endfunctionfunction! g:my_emptycmd(cmdline, context)  call vimshell#execute('echo "emptycmd"')  return a:cmdlineendfunctionfunction! g:my_preprompt(args, context)  call vimshell#execute('echo "preprompt"')endfunctionfunction! g:my_preexec(cmdline, context)  call vimshell#execute('echo "preexec"')  if a:cmdline =~# '^s*diff>'    call vimshell#set_syntax('diff')  endif  return a:cmdlineendfunctionautocmd 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'] = 'hw*'" ユーザー定義スニペット保存ディレクトリlet g:neocomplcache_snippets_dir = $HOME.'/.vim/snippets'" スニペットimap <C-k> <Plug>(neocomplcache_snippets_expand)smap <C-k> <Plug>(neocomplcache_snippets_expand)" 補完を選択しpopupを閉じるinoremap <expr><C-y> neocomplcache#close_popup()" 補完をキャンセルしpopupを閉じるinoremap <expr><C-e> neocomplcache#cancel_popup()" TABで補完できるようにするinoremap <expr><TAB> pumvisible() ? "<C-n>" : "<TAB>"" undoinoremap <expr><C-g>     neocomplcache#undo_completion()" 補完候補の共通部分までを補完するinoremap <expr><C-l> neocomplcache#complete_common_string()" SuperTab like snippets behavior.imap <expr><TAB> neocomplcache#sources#snippets_complete#expandable() ? "<Plug>(neocomplcache_snippets_expand)" : pumvisible() ? "<C-n>" : "<TAB>"" C-kを押すと行末まで削除inoremap <C-k> <C-o>D" C-nでneocomplcache補完inoremap <expr><C-n>  pumvisible() ? "<C-n>" : "<C-x><C-u><C-p>"" C-pでkeyword補完inoremap <expr><C-p> pumvisible() ? "<C-p>" : "<C-p><C-n>"" 補完候補が出ていたら確定、なければ改行inoremap <expr><CR>  pumvisible() ? neocomplcache#close_popup() : "<CR>"" <TAB>: completion.inoremap <expr><TAB>  pumvisible() ? "<C-n>" : "<TAB>"" <C-h>, <BS>: close popup and delete backword char.inoremap <expr><C-h> neocomplcache#smart_close_popup()."<C-h>"inoremap <expr><BS> neocomplcache#smart_close_popup()."<C-h>"inoremap <expr><C-x><C-o> &filetype == 'vim' ? "<C-x><C-v><C-p>" : neocomplcache#manual_omni_complete()" FileType毎のOmni補完を設定autocmd FileType python set omnifunc=pythoncomplete#Completeautocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJSautocmd FileType html set omnifunc=htmlcomplete#CompleteTagsautocmd FileType css set omnifunc=csscomplete#CompleteCSSautocmd FileType xml set omnifunc=xmlcomplete#CompleteTagsautocmd FileType php set omnifunc=phpcomplete#CompletePHPautocmd FileType c set omnifunc=ccomplete#Completeautocmd FileType ruby set omnifunc=rubycomplete#Complete" Enable heavy omni completion.if !exists('g:neocomplcache_omni_patterns')  let g:neocomplcache_omni_patterns = {}endiflet g:neocomplcache_omni_patterns.ruby = '[^. *t].w*|hw*::'let g:neocomplcache_omni_patterns.php = '[^. t]->hw*|hw*::'"------------------------------------" unite.vim"------------------------------------" The prefix key.nnoremap    [unite]   <Nop>nmap    f [unite]nnoremap [unite]u  :<C-u>Unite<Space>nnoremap <silent> [unite]a  :<C-u>UniteWithCurrentDir -buffer-name=files buffer file_mru bookmark file<CR>nnoremap <silent> [unite]f  :<C-u>Unite -buffer-name=files file<CR>nnoremap <silent> [unite]b  :<C-u>Unite buffer<CR>nnoremap <silent> [unite]m  :<C-u>Unite file_mru<CR>" nnoremap <silent> [unite]b  :<C-u>UniteWithBufferDir -buffer-name=files buffer file_mru bookmark file<CR>autocmd FileType unite call s:unite_my_settings()function! s:unite_my_settings()"{{{  " Overwrite settings.  imap <buffer> jj      <Plug>(unite_insert_leave)  nnoremap <silent><buffer> <C-k> :<C-u>call unite#mappings#do_action('preview')<CR>  imap <buffer> <C-w>     <Plug>(unite_delete_backward_path)  " Start insert.  let g:unite_enable_start_insert = 1endfunction"}}}let g:unite_source_file_mru_limit = 200

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中