vimカスタマイズ中

" =============================================================
" ぷらぎんのメモ
" =============================================================
" bufexplorer.vim
" http://redtower.plala.jp/2010/12/13/vim-plugin-bufexplorer.html
" http://blog.cohtan.org/2008/02/vimbufexplorervim.html
" バッファ管理用
" <leader>be :バッファ一覧のウィンドウを表示する。
" <leader>bs :バッファ一覧のウィンドウを画面分割(上下)して表示する。
" <leader>bv :バッファ一覧のウィンドウを画面分割(左右)して表示する。

" project.vim
" http://hoshinanonikki.net/20070820.html
" http://d.hatena.ne.jp/hidde/20080930/1222776171
" プロジェクト管理
" Test = /var/www/htdocs/ CD = . filter = "*.html *.php" {
"   Application = application {
"     Controllers = controllers {
"       index.html
"       welcome.php
"     }
"     Models = models {
"       index.html
"     }
"     Views = views {
"       index.html
"       welcome_message.php
"     }
"   }
" }

" taglist.vim
" http://nanasi.jp/articles/vim/taglist_vim.html
" メソッド宣言、変数宣言の一覧を別ウィンドウで表示する
" :Tlist

" hatena.vim
" http://motormean.s58.xrea.com/b/vim/hatena_vim.html
" はてダをvimで更新
" :HatenaEdit [[[YYYY]MM]DD] 指定した日付の日記を開きます。
" :HatenaUpdate [title] :HatenaEditで開いた日記を更新します。
" :HatenaUpdateTrivial [title] :HatenaUpdateと一緒ですが、"ちょっとした更新"になります。

" quickrun.vim
" http://takus.me/computer/vim/quickrun-vim/
" \rで書いてるコード(perlとか)を実行

" pathogen.vim
" http://d.hatena.ne.jp/mkataigi/20101107/1289134775
" プラグイン管理用

" eregex.vim
" http://d.hatena.ne.jp/ruedap/20110202/vim_ruby_regexp_plugin_eregex
" :%S/(hoge|fuga|piyo|poyo)/foo/g で文字列置換をperl風にできる
" :%s # vimの正規表現による置換
" :%S # eregexの正規表現vimによる置換
" :%g # vimの(ry
" :%G # eregexの(ry
" / # vimの(ry
" :M/ # eregex の(ry

" neocomplcache.vim
" http://vim-users.jp/2010/10/hack177/
" 自動保管ぷらぎん(.vim以下のディレクトリ構成が楽になる)

" smartchr.vim
" http://project-p.jp/halt/?p = 1068
" イコール入力で前後にスペース入れてくれる

" vimshell.vim (+ vimproc.vim)
" http://d.hatena.ne.jp/nauthiz/20101107/1289140518
" vimでshell使える。vimprocはvimshell使うために必要

" vim-ref.vim
" http://tech.kayac.com/archive/vim-plugin-coding.html
" perldocとかphpmanualからドキュメント検索してくれる
" :Ref source wordで実行
" source ... perldoc, phpmanual
" word ... 検索ワード

" cocoa.vim
" http://d.hatena.ne.jp/marutanm/20100117/p1
" XCode代わりにVimを使うための何か
" コマンド      内容
" K     カーソルがあるところの単語をドキュメントから検索
" Cmd+Opt+↑    .hファイルと.mファイルのトグル
" Cmd+r ビルド&実行
" Cmd+b ビルド
" shift+k       クリーン
" Cmd+0 Xcodeのプロジェクトウィンドウを開く
" Cmd+2 :ListMethods(メソッド一覧)
" (インサートモードで)F5      オムニ補完を表示

" zencoding.vim
" http://mattn.github.com/zencoding-vim/
" HTMLのひな形生成
" Control + h
" 使い方は以下見るのが早い
" https://github.com/mattn/zencoding-vim/blob/master/doc/zencoding.txt

" =============================================================
" キーバインド指定
" =============================================================
" {{{
" タブ操作用(Firefox風), GUIじゃないと動かないっぽい...
map <C-S-tab> :tabprevious<cr>
map <C-tab> :tabnext<cr>

" Escの2回押しでハイライト消去
nmap <ESC><ESC> :nohlsearch<CR><ESC>
" タブ操作用(Firefox風), GUIじゃないと動かないっぽい...
nmap <C-S-tab> :tabprevious<cr>
nmap <C-tab> :tabnext<cr>
" バッファ管理用
nmap <C-l> :BufExplorer<CR>

" タブ操作用(Firefox風), GUIじゃないと動かないっぽい...
imap <C-S-tab> <ESC>:tabprevious<cr>i
imap <C-tab> <ESC>:tabnext<cr>i

" ビジュアルモードで選択した範囲を(コメントアウト|コメント削除)
vmap ,# :s/^/#/<CR>:nohlsearch<CR>
vmap ,c :s/^\/\/\\|^--\\|^> \\|^[#"%!;]//<CR>:nohlsearch<CR>

" イコールを入力すると自動的にスペースを入力
inoremap <expr> = smartchr#one_of(' = ', ' == ', ' === ', '=')

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

" Tabで自動保管
"inoremap <tab> <c-r>=InsertTabWrapper()<cr>
" ビジュアルモードで選択したテキストを検索
vnoremap * y/<C-r>0<CR>
" }}}

" =============================================================
" 初期設定
" =============================================================
" {{{
syntax on
filetype on
filetype indent on
filetype plugin on

" vimのプラグイン管理用
call pathogen#runtime_append_all_bundles()

" インデント方式
set shiftwidth=2
set smarttab
" インクリメンタル検索
set incsearch
set hlsearch
" Tabによるインデント回避
set expandtab
" カーソルのある行番号の表示
set ruler
" カーソル行をハイライト
set cursorline
" タブ系の設定
set showtabline=2
" 行番号表示
set number
" for windows key-map
set backspace=2
" バックアップとか自分でしろ
set nobackup
" スワップファイル要らない
set noswapfile
" 対応する括弧の表示
set showmatch
" ヤンクしたテキストを無名レジスタだけでなく、*レジスタにも入るようにする
"set clipboard+=unnamed
" ビジュアルモードで選択したテキストが、クリップボードに入るようにする
"set guioptions+=a
"set clipboard+=autoselect
" 折り返さない
set nowrap
" 改行コードの自動認識
set fileformats=unix,dos,mac
" 文字コード指定
set enc=utf-8
set fenc=utf-8
set fencs=iso-2022-jp,enc-jp,cp932
" ターミナルでマウスを使用できるようにする
set mouse=a
set ttymouse=xterm
" タグ一覧生成可能に
set tags=./.tags,./../.tags,./*/.tags,./../../.tags,./../../../.tags,./../../../../.tags,./../../../../../.tags

" テーマ設定
colorscheme desert

" 保管候補のポップアップの色設定
hi Pmenu guibg=#666666
hi PmenuSel guibg=#8cd0d3 guifg=#666666
hi PmenuSbar guibg=#333333
" タブ色設定
hi TabLine     term=reverse cterm=reverse ctermfg=white ctermbg=black
hi TabLineFill term=reverse cterm=reverse ctermfg=white ctermbg=black
" ハイライトの色指定
hi clear CursorLine
hi CursorLine gui=underline
highlight CursorLine ctermbg=darkgray guibg=black

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

" はてダ投稿用
let g:hatena_user='rin1024'
" HTMLのひな形生成用
let g:user_zen_expandabbr_key='<C-h>'
" Objective-C対応用?
let tlist_objc_settings = 'objc;P:protocols;i:interfaces;I:implementations;M:instance methods;C:implementation methods;Z:protocol methods'
" }}}

" =============================================================
" autocmdは自動実行されるコマンド
" =============================================================
" {{{
" 辞書の設定
autocmd FileType perl :set dictionary=/usr/share/vim/vim72/syntax/perl.vim
autocmd FileType ruby :set dictionary=/usr/share/vim/vim72/syntax/ruby.vim
autocmd FileType php :set dictionary=/usr/share/vim/vim72/syntax/php.vim
autocmd FileType java :set dictionary=/usr/share/vim/vim72/syntax/java.vim
autocmd FileType html :set dictionary=/usr/share/vim/vim72/syntax/html.vim
autocmd FileType javascript :set dictionary=/usr/share/vim/vim72/syntax/javascript.vim

" 拡張子の関連付け
autocmd BufNewFile,BufRead *.ctp set filetype=php
autocmd BufNewFile,BufRead *.ep set filetype=html

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

" =============================================================
" ユーティリティ
" =============================================================
" {{{
" 文字コードの自動認識
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

" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
  set ambiwidth=double
endif
" }}}

" -----------------------------------
" neocomplcache(自動保管)
" -----------------------------------
" {{{
" Disable AutoComplPop.
let g:acp_enableAtStartup = 0
" Use neocomplcache.
let g:neocomplcache_enable_at_startup = 1
" Use smartcase.
let g:neocomplcache_enable_smart_case = 1
" Use camel case completion.
let g:neocomplcache_enable_camel_case_completion = 1
" Use underbar completion.
let g:neocomplcache_enable_underbar_completion = 1
" Set minimum syntax keyword length.
let g:neocomplcache_min_syntax_length = 3
let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'

" Define dictionary.
let g:neocomplcache_dictionary_filetype_lists = {
      \ 'default' : '',
      \ 'vimshell' : $HOME.'/.vimshell_hist',
      \ 'scheme' : $HOME.'/.gosh_completions'
      \ }

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

" Plugin key-mappings.
imap <C-k>     <Plug>(neocomplcache_snippets_expand)
smap <C-k>     <Plug>(neocomplcache_snippets_expand)
inoremap <expr><C-g>     neocomplcache#undo_completion()
inoremap <expr><C-l>     neocomplcache#complete_common_string()

" Recommended key-mappings.
" <CR>: close popup and save indent.
inoremap <expr><CR>  neocomplcache#smart_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-y>  neocomplcache#close_popup()
inoremap <expr><C-e>  neocomplcache#cancel_popup()
" }}}

" =============================================================
" 個人的リファレンス
" =============================================================
" {{{
" <C-r> "        最後にdelete、yankしたテキスト
" <C-r> *        クリップボードに格納されたテキスト
" <C-r> /        最後に使用した検索ワード
" <C-r> :        最後に入力したvimエディタコマンド
" <C-r> %        今開いているファイルのファイル名
" <C-r> #        直前に開いていたファイルのファイル名

" <C-e>		1 行下にスクロール
" <C-y>		1 行上にスクロール
" <C-d>         半画面下にスクロール
" <C-u>         半画面上にスクロール
" <C-f>		1 画面下にスクロール
" <C-b>		1 画面上にスクロール

" <C-l>		再描画	表示が変になったときに使用
" <C-a>		カーソル位置の数字を 1 増やす
" <C-x>		カーソル位置の数字を 1 減らす

" <C-G>		編集中のファイル名と現在の位置をみる
"		g <C-G> カーソルの位置を行番号などで表示、<S-V> で行選択モードにした方がカーソル行がハイライトされてわかりやすい

" Ctrl + v	矩形選択スタート
" Shift + v	行選択スタート

" $ 		行末に移動
" ^ 		行頭に移動
" w 		次の単語に移動
" b 		前の単語に移動
" f(文字) 	今カーソルがある行のその(文字)に移動
" F(文字) 	今カーソルがある行のその(文字)に移動(逆向き)
" %	 	対応する括弧に移動

" *		カーソル位置の単語を前方検索
" #		カーソル位置の単語を後方検索
" ~		大文字・小文字の変換
" .		直前の変更コマンドを繰り返す
" m 文字	マークを付ける
" ` 文字	マークまで移動する
" ' 文字	マークのある行の先頭へ移動する
" q 文字	マクロを記録する	記録終了は q
" @ 文字	マクロを実行する
" K		カーソル位置の単語を man コマンドで調べる

" :! コマンド		外部コマンドを実行する
" :r! コマンド		外部コマンドの出力を取りこむ
" :数字,数字! コマンド	指定行を標準入力としてコマンドを実行・出力を取りこむ

" d/hoge	現在位置から hoge の手前まで削除できる
" di"		"" で囲まれたテキストを削除
" da"		"" も含み、"" で囲まれたテキストを削除

" :scriptnames  ロードされているモジュールの確認

" %             対応する括弧へ移動
" dw            単語単位の削除

" <C-w>w 分割画面移動?

" nnoremap {lhs} {rhs}
" normalモードのkey mappingを定義するコマンド.
" {lhs}のキーシーケンスを{rhs}にマッピングする
" {rhs}中のキーがさらにマッピングされていても再帰的な展開はしない.
" nnoremapの{rhs}に<Nop>を指定すると,{lhs}を入力しても何も起こらなくなる(No Operation).
" nnoremapで「<silent>」を指定すると,マッピングされたキーが実行されたときにコマンドラインへの出力を行わなくなる(ちらつき対策).

" <leader>はvimエディタデフォルトでは「 \ 」になっている
" }}}