Skip to content

Instantly share code, notes, and snippets.

@rhysd
Created October 11, 2011 15:33

Revisions

  1. rhysd created this gist Oct 11, 2011.
    373 changes: 373 additions & 0 deletions .vimrc
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,373 @@
    let mapleader = ','

    syntax on
    "行番号表示
    set number
    "バックアップファイルいらない
    set nobackup
    "vi協調モードoff
    set nocompatible
    "自動インデント
    set autoindent
    "タブが対応する空白の数
    set tabstop=4 shiftwidth=4 softtabstop=0
    "タブの代わりにスペースを使わない
    set noexpandtab
    "長い行でも折り返さない
    set nowrap
    "検索が末尾まで進んだら,ファイル先頭につなげる
    set wrapscan
    "対応する括弧にわずかの間ジャンプする
    set showmatch
    "カーソルが何行何列目にあるか表示する
    set ruler
    "最下ウィンドウにステータス行が表示される時
    "1: ウィンドウの数が2以上 2:常
    set laststatus=2
    "モードライン無効化
    set modelines=0
    "スクロール時の余白確保
    set scrolloff=5
    "いろいろスマート
    set smarttab
    set smartindent
    "大文字が入っている時のみ大文字小文字を区別
    set ignorecase
    set smartcase
    "ビープ音OFF
    set vb t_vb=
    "ホワイトスペース類を表示する
    set list
    set listchars=tab-,trail:-,eol:↲,extends:»,precedes:«,nbsp:%
    "Boostをpathに追加
    set path=.,/usr/include,/opt/local/include,/opt/local/include/gcc46/c++,/opt/local/lib,/Users/rhayasd/programs/**,/Users/rhayasd
    "起動時のメッセージを消す
    set shortmess+=I
    "起動時IMEをOFFにする
    set iminsert=0 imsearch=0
    "IMを使う
    set noimdisable
    "コマンドラインでのIM無効化
    set noimcmdline
    "バックスペースでなんでも消せるように
    set backspace=indent,eol,start
    "ファイル切替時にファイルを隠す
    set hidden
    "日本語ヘルプを優先的に検索
    set helplang=ja
    "OSのクリップボードを使う
    set clipboard+=unnamed
    "矩形選択で自由に移動する
    set virtualedit+=block
    "改行コードの自動認識
    set fileformats=unix,dos,mac
    "コマンド実行中は再描画しない
    set lazyredraw
    "高速ターミナル接続を行う
    set ttyfast
    "MacVim Kaoriyaに標準で入っている辞書を無効化
    let g:plugin_dicwin_disable = 1
    "imsertモードから抜けるときにIMをOFFにする(GUI(MacVim)は自動的にやってくれる
    "iminsert=2にすると,insertモードに戻ったときに自動的にIMの状態が復元される
    if !has("gui_running")
    inoremap <silent> <ESC> <ESC>:set iminsert=0<CR>
    endif

    """"""""""""""""""""""""""""""""""
    " neocomplcacheの設定 "
    """"""""""""""""""""""""""""""""""
    "AutoComplPopを無効にする
    let g:acp_enableAtStartup = 0
    "vim起動時に有効化
    let g:neocomplcache_enable_at_startup = 1
    "smart_caseを有効にする.大文字が入力されるまで大文字小文字の区別をなくす
    let g:neocomplcache_enable_smart_case = 1
    " CamelCase補完有効化
    "let g:neocomplcache_enable_camel_case_completion = 1
    "_を区切りとした補完を有効にする
    let g:neocomplcache_enable_underbar_completion = 1
    "シンタックスをキャッシュするときの最小文字長を3に
    let g:neocomplcache_min_syntax_length = 3
    "日本語を収集しないようにする
    if !exists('g:neocomplcache_keyword_patterns')
    let g:neocomplcache_keyword_patterns = {}
    endif
    let g:neocomplcache_keyword_patterns['default'] = '\h\w*'
    "リスト表示
    let g:neocomplcache_max_list = 100
    let g:neocomplcache_max_keyword_width = 20
    "リストの最大幅を指定
    "let g:neocomplcache_max_filename_width = 25
    "ctagsへのパス
    let g:neocomplcache_ctags_program = '/opt/local/bin/ctags'
    "区切り文字パターンの定義
    if !exists('g:neocomplcache_delimiter_patterns')
    let g:neocomplcache_delimiter_patterns= {}
    endif
    let g:neocomplcache_delimiter_patterns.vim = ['#']
    let g:neocomplcache_delimiter_patterns.cpp = ['::']
    "インクルードパスの指定
    let g:neocomplcache_include_paths = {
    \ 'cpp' : '.,/opt/local/include/gcc46/c++,/opt/local/include,/usr/include',
    \ 'c' : '.,/usr/include',
    \ 'ruby' : '.,/opt/local/lib/ruby1.9/1.9.1,/Users/rhayasd/programs',
    \ 'perl' : '.,/System/Library/Perl,/Users/rhayasd/programs',
    \ }
    "インクルード文のパターンを指定
    let g:neocomplcache_include_patterns = {
    \ 'cpp' : '^\s*#\s*include',
    \ 'ruby' : '^\s*require',
    \ 'perl' : '^\s*use',
    \ }
    "インクルード先のファイル名の解析パターン
    let g:neocomplcache_include_exprs = {
    \ 'ruby' : substitute(substitute(v:fname,'::','/','g'),'$','.rb','')
    \ }
    if !has("gui_running")
    "CUIのvimでの補完リストの色を調節する
    highlight Pmenu ctermbg=8
    endif
    " Enable omni completion.
    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]\.\h\w*\|\h\w*::'
    let g:neocomplcache_omni_patterns.php = '[^. \t]->\h\w*\|\h\w*::'
    let g:neocomplcache_omni_patterns.c = '\%(\.\|->\)\h\w*'
    let g:neocomplcache_omni_patterns.cpp = '\h\w*\%(\.\|->\)\h\w*\|\h\w*::'
    "スニペットファイルのパス
    let g:neocomplcache_snippets_dir = $HOME.'/.vim/bundle/neocomplcache/snippets'

    """"""""""""""""""""""""""""""""""""""""""""
    " Unite.vim "
    """"""""""""""""""""""""""""""""""""""""""""
    "insertモードをデフォルトに
    let g:unite_enable_start_insert = 1

    """"""""""""""""""""""""""""""
    " VimShellの設定 "
    """"""""""""""""""""""""""""""
    "set VimShellInteractive=bash
    let g:vimshell_user_prompt = 'fnamemodify(getcwd(), ":~")'
    let g:vimshell_right_prompt = 'vimshell#vcs#info("(%s)-[%b]", "(%s)-[%b|%a]")'

    """""""""""""""""""""""""""""""
    " vim-quickrunの設定 "
    """""""""""""""""""""""""""""""
    "<Leader>r を使わない
    let g:quickrun_no_default_key_mappings = 1
    " quickrun_configの初期化
    if !has("g:quickrun_config")
    let g:quickrun_config = {}
    endif
    "C++: MacPortsのg++
    let g:quickrun_config.cpp = {
    \ 'command' : 'g++-mp-4.6',
    \ 'cmdopt' : '-std=c++0x -Wall -Wextra -O2 '
    \}
    "ruby1.9.1
    let g:quickrun_config.ruby = {
    \ 'command' : 'ruby1.9'
    \}
    "QuickRun 実行時のバッファの開き方
    let g:quickrun_config._ = {
    \ 'outputter' : 'quickfix',
    \ 'split' : 'rightbelow 10sp'
    \}

    """""""""""""""""""""""""""""""""""
    " Hier.vim "
    """""""""""""""""""""""""""""""""""
    "CUIだとエラーハイライトが見づらいので修正
    if !has("gui_running")
    highlight Error ctermbg=9
    highlight qf_error_ucurl ctermbg=9
    let g:hier_highlight_group_qf = "qf_error_ucurl"
    let g:hier_highlight_group_loc = "qf_error_ucurl"
    highlight qf_warning_ucurl ctermbg=3
    let g:hier_highlight_group_qfw = "qf_warning_ucurl"
    let g:hier_highlight_group_locw = "qf_warning_ucurl"
    endif

    """"""""""""""""""""""""""""""""""
    " vim-toggle.vim "
    """"""""""""""""""""""""""""""""""
    let g:toggle_pairs = {
    \'and':'or', 'or':'and',
    \'==':'!=','!=':'==',
    \'<=':'>=','>=':'<=',
    \'class':'struct','struct':'class',
    \'boost':'std','std':'boost',
    \'top':'right','right':'bottom','bottom':'left','left':'top'
    \}
    " \'const&':'&','&':'const&'

    """"""""""""""""""""""""""""""""""""""""""""
    " キーマップの設定 "
    """"""""""""""""""""""""""""""""""""""""""""
    "insertモードから抜ける
    inoremap jj <ESC>
    inoremap <C-j> <ESC>
    "Esc->Escで検索結果をクリア
    nnoremap <silent><ESC><ESC> :nohlsearch<CR><ESC>
    "行頭・行末の移動
    nnoremap 1 0
    nnoremap 0 ^
    nnoremap 9 $
    " 空行挿入
    nnoremap ; :<C-u>call append(expand('.'), '')<CR>j
    "ヘルプ表示
    nnoremap <Leader>vh :vert bo help<Space>
    "insertモード時はEmacsライクなバインディング.ポップアップが出ないように移動.
    inoremap <C-e> <END>
    inoremap <C-a> <HOME>
    inoremap <expr><C-n> pumvisible() ? "\<C-y>\<Down>" : "\<Down>"
    inoremap <expr><C-p> pumvisible() ? "\<C-y>\<Up>" : "\<Up>"
    inoremap <expr><C-b> pumvisible() ? "\<C-y>\<Left>" : "\<Left>"
    inoremap <expr><C-f> pumvisible() ? "\<C-y>\<Right>" : "\<Right>"
    " inoremap <C-n> <Down>
    " inoremap <C-p> <Up>
    " inoremap <C-b> <Left>
    " inoremap <C-f> <Right>
    inoremap <C-d> <Del>
    inoremap <C-k> <C-o>D
    "バッファ切り替え
    nnoremap <silent><Right> :<C-u>bnext<CR>
    nnoremap <silent><Left> :<C-u>bprevious<CR>
    nnoremap <silent><Down> :<C-u>bw<CR>
    nnoremap <silent><Up> :<C-u>Unite buffer<CR>
    nnoremap <silent><C-n> :<C-u>bnext<CR>
    nnoremap <silent><C-p> :<C-u>bprevious<CR>
    "Visualモード時にvで行末まで選択する
    vnoremap v $h
    "CTRL-hjklでウィンドウ移動
    nnoremap <C-j> <C-w>j
    nnoremap <C-k> <C-w>k
    nnoremap <C-l> <C-w>l
    nnoremap <C-h> <C-w>h
    "縦方向移動支援
    nnoremap J 3j
    nnoremap K 3k
    "VimShell
    nnoremap <Leader>vs :VimShell<CR>
    "neocomplcacheの設定
    imap <C-s> <Plug>(neocomplcache_snippets_expand)
    smap <C-s> <Plug>(neocomplcache_snippets_expand)
    inoremap <expr><C-g> neocomplcache#undo_completion()
    "inoremap <expr><C-l> neocomplcache#complete_common_string()
    "スニペット展開候補があれば展開を,そうでなければbash風補完を.
    imap <expr><C-l> neocomplcache#sources#snippets_complete#expandable() ? "\<Plug>(neocomplcache_snippets_expand)" : neocomplcache#complete_common_string()
    " <CR>: close popup and save indent.
    inoremap <expr><CR> pumvisible() ? neocomplcache#smart_close_popup()."\<CR>" : "\<CR>"
    " <TAB>: completion
    inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
    "スニペットがあればそれを展開.なければ通常の挙動をするTABキー
    " imap <expr><TAB> neocomplcache#sources#snippets_complete#expandable() ? "\<Plug>(neocomplcache_snippets_expand)" : 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()
    "d_で次の_の手前まで消す
    nnoremap d_ vf_hd
    "c_で次の_の手前まで消して訂正
    nnoremap c_ vf_hc
    "Unite.vimのキーマップ
    "insertモード時はC-gでいつでもバッファを閉じられる(絞り込み欄が空の時はC-hでもOK)
    autocmd FileType unite imap <buffer> <C-g> <Plug>(unite_exit)
    "ファイル上にカーソルがある時,pでプレビューを見る
    autocmd FileType unite inoremap <buffer><expr> p unite#smart_map("p", unite#do_action('preview'))
    "C-xでクイックマッチ
    autocmd FileType unite imap <buffer> <C-x> <Plug>(unite_quick_match_default_action)
    "lでデフォルトアクションを実行
    autocmd FileType unite nmap <buffer> l <Plug>(unite_do_default_action)
    autocmd FileType unite imap <buffer><expr> l unite#smart_map("l", unite#do_action(unite#get_current_unite().context.default_action))
    "増えすぎてアレなら <Leader>ua などに置き換える.そのときはnnoremap <Leader>u <Nop>を忘れないようにする.
    "すべてを表示
    nnoremap <silent> <Leader>a :<C-u>Unite -buffer-name=files buffer file_mru bookmark file outline history/yank<CR>
    "バッファを開いた時のパスを起点としたファイル検索
    nnoremap <silent> <Leader>f :<C-u>UniteWithBufferDir -buffer-name=files file<CR>
    "バッファ一覧
    nnoremap <silent> <Leader>b :<C-u>Unite buffer<CR>
    "ブックマークしたファイル/ディレクトリ
    nnoremap <silent> <Leader>B :<C-u>Unite -no-start-insert bookmark<CR>
    "最近使用したファイル
    nnoremap <silent> <Leader>m :<C-u>Unite -no-start-insert file_mru directory_mru<CR>
    "プログラミングにおけるアウトラインの表示
    nnoremap <silent> <Leader>o :<C-u>Unite outline<CR>
    "grep検索.
    nnoremap <silent> <Leader>g :<C-u>Unite -no-start-insert grep<CR>
    "yank履歴
    nnoremap <silent> <Leader>y :<C-u>Unite -no-start-insert history/yank<CR>
    "helpを引く.絞り込み初期は候補が膨大になるのでワードを先に入力
    nnoremap <silent> <Leader>h :<C-u>UniteWithInput -no-start-insert help<CR>
    "Uniteバッファの復元
    nnoremap <silent> <Leader>r :<C-u>UniteResume<CR>
    "QuickRunのキーマップ
    nnoremap <Leader>q <Nop>
    nmap <silent><Leader>qr :w<CR><Plug>(quickrun):copen<CR>
    nnoremap <Leader>qR :QuickRun<Space>
    "QuickFixバッファを閉じると同時にエラー表示も消す
    autocmd FileType qf nnoremap <buffer><silent> q :q<CR>:HierClear<CR>
    "tcomment.vimのキーマップ
    nnoremap <Leader>c :TComment<CR>
    vnoremap <Leader>c :TComment<CR>
    vnoremap <Leader>C :TCommentBlock<CR>
    "endwise.vimのキーマップ
    "キーマップ問題解消のためにカスタマイズ.(ソースもカスタマイズ.)
    "http://d.hatena.ne.jp/rhysd/20111010
    autocmd FileType ruby imap <buffer> <expr><CR> pumvisible() ? neocomplcache#smart_close_popup() . "\<CR>\<Plug>DiscretionaryEnd" : "\<CR>\<Plug>DiscretionaryEnd"
    "vim-toggleのキーマップ
    nmap <C-t> <Plug>ToggleN
    """""""""""""""""""""""""""""
    " vundle.vim の設定 "
    """""""""""""""""""""""""""""
    filetype off " required!

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

    " let Vundle manage Vundle
    " required!
    Bundle 'gmarik/vundle'

    " My Bundles here:

    " original repos on github
    Bundle 'Shougo/vimshell'
    Bundle 'Shougo/vimproc'
    Bundle 'Shougo/neocomplcache'
    Bundle 'thinca/vim-quickrun'
    Bundle 'Shougo/unite.vim'
    Bundle 'tomtom/tcomment_vim'
    Bundle 'h1mesuke/unite-outline'
    Bundle 'tsukkee/unite-help'
    Bundle 'hiroro/vimdoc_ja'
    Bundle 'jceb/vim-hier'
    Bundle 'taku-o/vim-toggle'

    " vim-scripts repos
    "Bundle 'errormarker.vim'
    Bundle 'surround.vim'
    "Bundle 'endwise.vim'

    " non github repos
    "Bundle 'git://git.wincent.com/command-t.git'

    filetype plugin indent on " required!