.vimrcを晒してみる

```shell:.vimrc
"NeoBundleの設定"{{{
    if has('vim_starting')
      set nocompatible
      set runtimepath+=~/.vim/bundle/neobundle.vim/
    endif

    call neobundle#begin(expand('~/.vim/bundle/'))

    NeoBundleFetch 'Shougo/neobundle.vim'

    "Unite
    NeoBundle 'Shougo/unite.vim'
    NeoBundle 'Shougo/neomru.vim'
    NeoBundle 'Shougo/unite-outline'
    NeoBundle 'ujihisa/unite-colorscheme'
    "補完
    NeoBundle 'Shougo/neocomplcache'
    "スニペット関連
    NeoBundle 'Shougo/neosnippet'
    NeoBundle 'Shougo/neosnippet-snippets'
    "ファイラー
    NeoBundle 'Shougo/vimfiler.vim'
    "カラースキーマ
    NeoBundle 'altercation/vim-colors-solarized'
    NeoBundle 'croaker/mustang-vim'
    NeoBundle 'nanotech/jellybeans.vim'
    NeoBundle 'tomasr/molokai'
    NeoBundle 'w0ng/vim-hybrid'
    NeoBundle 'sickill/vim-monokai'
    "テキストオブジェクトをもっと便利に
    NeoBundle 'tpope/vim-surround'
    NeoBundle 'kana/vim-textobj-user'
    NeoBundle 'akiyan/vim-textobj-php'
    NeoBundle 'osyo-manga/vim-textobj-multiblock'
    NeoBundle 'kana/vim-textobj-function'
    NeoBundle 'thinca/vim-textobj-comment'
    "Emmetプラグイン
    NeoBundle 'mattn/emmet-vim'
    "JSON表示用プラグイン
    NeoBundle 'elzr/vim-json'
    "コメントアウト
    NeoBundle 'tyru/caw.vim'
    "ステータスラインのカスタマイズ
    NeoBundle 'itchyny/lightline.vim'
    "カーソル移動拡張
    NeoBundle 'rhysd/clever-f.vim'
    NeoBundle 'rhysd/accelerated-jk'
    NeoBundle 'Lokaltog/vim-easymotion'
    "選択領域の移動
    NeoBundle 't9md/vim-textmanip'
    "コマンドを素早く実行
    NeoBundle 'thinca/vim-quickrun'
    "整列プラグイン
    NeoBundle 'junegunn/vim-easy-align'
    "対応する括弧を自動で挿入
    NeoBundle 'jiangmiao/auto-pairs'
    "Vimを1つのインスタンスで使う
    NeoBundle 'thinca/vim-singleton'
    "テンプレート管理
    NeoBundle 'mattn/sonictemplate-vim'
    "editorconfig
    NeoBundle 'editorconfig/editorconfig-vim'
    "バッファをサムネイルで選択
    NeoBundle 'itchyny/thumbnail.vim'
    "Git
    NeoBundle 'tpope/vim-fugitive'
    NeoBundle 'cohama/agit.vim'
    NeoBundle 'idanarye/vim-merginal'

    filetype plugin indent on

    NeoBundleCheck

    call neobundle#end()
"}}}

"vim-singletonの設定"{{{
    call singleton#enable()
"}}}

"各種設定"{{{
    "標準の文字コードをUTF-8に指定する
    set encoding=utf-8
    set fileencodings=iso-2022-jp,cp932,sjis,euc-jp,utf-8
    "シンタックスハイライトを有効にする
    syntax on
    "モードラインをONにする
    set modeline
    "OSのクリップボードを使う
    set clipboard=unnamed
    "ルーラーを表示
    set ruler
    "行数を表示
    set number
    "タブの設定
    set expandtab tabstop=4 shiftwidth=4 softtabstop=0
    "インデントの設定
    set autoindent
    set smartindent
    "折り返ししない
    set nowrap
    "スワップファイルを作成しない
    set noswapfile
    "バックアップファイルを作成しない
    set nobackup
    "ステータスラインを常に表示
    set laststatus=2
    "変更中のファイルでも、保存しないで他のファイルを表示
    set hidden
    "他で書き換えられたら自動で読み直す
    set autoread
    "カーソルの上または下に表示する最小限の行数
    set scrolloff=5
    "コマンドラインモードで保存する履歴件数
    set history=100
    "コマンドラインモードでTABキーによるファイル名補完を有効にする
    set wildmenu wildmode=list:longest,full
    "検索時に大文字・小文字を区別しない
    set ignorecase
    "ただし、検索後に大文字小文字が混在しているときは区別する
    set smartcase
    " スクロールする時に下が見えるようにする
    set scrolloff=5
    "不可視文字を可視化する
    set list
    "どの文字でタブや改行を表示するかを設定
    set listchars=tab:>.,trail:_,extends:<,eol:<
    "バックスペースでインデントや改行を削除できるようにする
    set backspace=indent,eol,start
    "検索時にファイルの最後まで行ったら戻らない
    set nowrapscan
    "括弧入力時に対応する括弧を表示 (noshowmatch:表示しない)
    set showmatch
    "コマンドライン補完するときに強化されたものを使う(参照 :help wildmenu)
    set wildmenu
    "grep時、自動的にquickfix-windowを開く
    autocmd QuickFixCmdPost *grep* cwindow
"}}}

"autocmdの設定{{{
    autocmd BufEnter * silent! lcd %:p:h
"}}}

"キーマッピング"{{{
    "-----------------------------------------------------------------------------------"
    " Mappings                                                                          |
    "-----------------------------------------------------------------------------------"
    " コマンド        | ノーマル | 挿入 | コマンドライン | ビジュアル | 選択 | 演算待ち |
    " map  / noremap  |    @     |  -   |       -        |     @      |  @   |    @     |
    " nmap / nnoremap |    @     |  -   |       -        |     -      |  -   |    -     |
    " vmap / vnoremap |    -     |  -   |       -        |     @      |  @   |    -     |
    " omap / onoremap |    -     |  -   |       -        |     -      |  -   |    @     |
    " xmap / xnoremap |    -     |  -   |       -        |     @      |  -   |    -     |
    " smap / snoremap |    -     |  -   |       -        |     -      |  @   |    -     |
    " map! / noremap! |    -     |  @   |       @        |     -      |  -   |    -     |
    " imap / inoremap |    -     |  @   |       -        |     -      |  -   |    -     |
    " cmap / cnoremap |    -     |  -   |       @        |     -      |  -   |    -     |
    "-----------------------------------------------------------------------------------"
    "コンマの後に自動的にスペースを挿入
    inoremap , ,<Space>
    "履歴検索
    nnoremap : q:a
    nnoremap / q/a
    nnoremap ? q?a
    "行末への移動
    nnoremap <C-\> $
    "INSERTモードからNORMALモードへ: jj
    inoremap jj <ESC>
    "縦方向は論理移動する
    noremap j gj
    noremap k gk
    noremap gj j
    noremap gk k
    "行頭移動を文字の先頭に変更
    noremap 0 ^
    "Ctrlキーを押しながらjkキーは+-と同じ動きにする
    noremap <C-j> +
    noremap <C-k> -
    "左右の矢印キーでバッファを移動
    nnoremap <M-LEFT> :bp<CR>
    nnoremap <M-RIGHT> :bn<CR>
    "全選択する
    nnoremap <Leader>a ggVG
    "新しいタブを開く
    nnoremap <Leader>t :tabnew<CR>
    "開いているタブを閉じる
    nnoremap <Leader>w :tabclose<CR>
    "インデント後に再選択
    vnoremap < <gv
    vnoremap > >gv
    "ハイライトを消す
    nnoremap <Esc> :nohlsearch<CR>
"}}}

"neocomplcache.vimの設定"{{{
    "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
    "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' : ''
        \ }

    "Plugin key-mappings.
    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 <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
    function! s:my_cr_function()
      return neocomplcache#smart_close_popup() . "\<CR>"
    endfunction
    "<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()
"}}}

"neosnippet.vimの設定"{{{
    " <TAB>: completion.
    " inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"
    inoremap <expr><S-TAB>  pumvisible() ? "\<C-p>" : "\<S-TAB>"

    " Plugin key-mappings.
    imap <C-k>     <Plug>(neosnippet_expand_or_jump)
    smap <C-k>     <Plug>(neosnippet_expand_or_jump)

    " SuperTab like snippets behavior.
    " imap <expr><TAB> neosnippet#jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : pumvisible() ? "\<C-n>" : "\<TAB>"
    imap <expr><TAB> pumvisible() ? "\<C-n>" : neosnippet#jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"
    smap <expr><TAB> neosnippet#jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"

    " For snippet_complete marker.
    if has('conceal')
      set conceallevel=2 concealcursor=i
    endif
"}}}

"caw.vimの設定"{{{
    "Ctrl+cでコメントアウトのON/OFF
    xmap <C-c> <Plug>(caw:i:toggle)
    nmap <C-c> <Plug>(caw:i:toggle)
"}}}

"vim-easy-alignの設定"{{{
    vmap <Enter> <Plug>(EasyAlign)
"}}}

"vim-textmanjpの設定"{{{
    "複製の設定
    xmap <C-S-DOWN> <Plug>(textmanip-duplicate-down)
    nmap <C-S-DOWN> <Plug>(textmanip-duplicate-down)
    "移動の設定
    xmap <M-S-DOWN> <Plug>(textmanip-move-down)
    xmap <M-S-UP> <Plug>(textmanip-move-up)
    xmap <M-S-LEFT> <Plug>(textmanip-move-left)
    xmap <M-S-RIGHT> <Plug>(textmanip-move-right)
"}}}

"vim-textobj-multiblock.vimの設定"{{{
    omap ab <Plug>(textobj-multiblock-a)
    omap ib <Plug>(textobj-multiblock-i)
    vmap ab <Plug>(textobj-multiblock-a)
    vmap ib <Plug>(textobj-multiblock-i)
"}}}

"vim-easymotionの設定"{{{
    "General Configuration
    let g:EasyMotion_do_mapping = 0
    let g:EasyMotion_enter_jump_first = 1
    let g:EasyMotion_space_jump_first = 1

    "Find Motions
    nmap s <Plug>(easymotion-s2)
    xmap s <Plug>(easymotion-s2)
    omap x <Plug>(easymotion-s2)
    let g:EasyMotion_smartcase = 1

    "Line Motions
    map <Space>j <Plug>(easymotion-j)
    map <Space>k <Plug>(easymotion-k)
    let g:EasyMotion_startofline = 0

    "Search Motions
    "`<Tab>` & `<S-Tab>` to scroll up/down a page with next match
    nmap g/ <Plug>(easymotion-sn)
    xmap g/ <Plug>(easymotion-sn)
    omap g/ <Plug>(easymotion-tn)
"}}}

"unite.vimの設定 {{{
    "インサートモードで開始
    let g:unite_enable_start_insert = 1
    "ヒストリー/ヤンク機能を有効化
    let g:unite_source_history_yank_enable =1
    "file_recのキャッシュの最小値/最大値を設定
    let g:unite_source_rec_min_cache_files = 100
    let g:unite_source_rec_max_cache_files = 5000
    "prefix keyの設定
    nmap <Space> [unite]

    "スペースキーとaキーでVimShellを起動
    nnoremap <silent> [unite]a :<C-u>UniteWithBufferDir -buffer-name=files file<CR>
    "スペースキーとfキーでバッファと最近開いたファイル一覧を表示
    nnoremap <silent> [unite]f :<C-u>Unite<Space>buffer file_mru<CR>
    "スペースキーとdキーで最近開いたディレクトリを表示
    nnoremap <silent> [unite]d :<C-u>Unite<Space>directory_mru<CR>
    "スペースキーとhキーでヒストリ/ヤンクを表示
    nnoremap <silent> [unite]h :<C-u>Unite<Space>history/yank<CR>
    "スペースキーとoキーでoutline
    nnoremap <silent> [unite]o :<C-u>Unite<Space>outline<CR>
    "スペースキーとENTERキーでfile_rec:!
    nnoremap <silent> [unite]<CR> :<C-u>Unite<Space>file_rec:!<CR>
    "unite.vimを開いている間のキーマッピング
    autocmd FileType unite call s:unite_my_settings()
    function! s:unite_my_settings()"{{{
        " ESCでuniteを終了
        nmap <buffer> <ESC> <Plug>(unite_exit)
    endfunction"}}}
"}}}

"vimfiler.vimの設定"{{{
    "vimデフォルトのエクスプローラをvimfilerで置き換える
    let g:vimfiler_as_default_explorer = 1
    "セーフモードを無効にした状態で起動する
    let g:vimfiler_safe_mode_by_default = 0
    "自動でカレントディレクトリを移動する
    let g:vimfiler_enable_auto_cd = 1

    "現在開いているバッファをIDE風に開く
    nnoremap <silent> <Leader>z :<C-u>VimFilerBufferDir -split -simple -winwidth=45 -toggle -no-quit<CR>
"}}}

"thumbnail.vimの設定"{{{
    nnoremap <Leader>b :Thumbnail<CR>
"}}}

"lightline.vimの設定"{{{
    let g:lightline = {
            \ 'active': {
            \   'left': [
            \     ['mode'],
            \     ['fugitive', 'filename']
            \   ]
            \ },
            \ 'component_function': {
            \   'fugitive': 'MyFugitive'
            \ }
            \ }

    function! MyFugitive()
      try
        if &ft !~? 'vimfiler\|gundo' && exists('*fugitive#head')
          let _ = fugitive#head()
          return strlen(_) ? _ : ''
        endif
      catch
      endtry
      return ''
    endfunction
"}}}
```