-
Notifications
You must be signed in to change notification settings - Fork 1
/
.vimrc
1395 lines (1255 loc) · 49.8 KB
/
.vimrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
scriptencoding utf-8
" augroup がセットされていない autocmd 全般用の augroup
" これをやっておかないと ReloadVimrc したときに困る.by Linda_pp
augroup MyAutocmd
autocmd!
augroup END
""" Options {{{
" Vi互換モードを使わない
set nocompatible
" シンタックスハイライト
syntax enable
" バックスペースでいろいろ消せる
set backspace=indent,eol,start
" バックアップファイルなし
set nobackup
" .viminfoファイル制限
set viminfo=!,'50,<1000,s100,\"50
" 履歴を500件まで保存する
set history=1000
" カーソル位置を表示する
set ruler
" スクロール時の余白確保
set scrolloff=5
" ファイルエンコーディングをutf-8優先
set encoding=utf-8
set fileencodings=utf-8,iso-2022-jp,sjis,euc-jp
set fileformats=unix,mac,dos
" 行番号表示
set number
"" タブ幅 {{{
set showtabline=2
set expandtab " タブをスペースに展開する
set tabstop=4 " 画面上のタブ幅
set shiftwidth=4 " インデント時に自動的に挿入されるタブ幅
set softtabstop=4 " キーボードで<Tab>キーを押したときに挿入される空白の量
set shiftround
set smarttab " 行頭の余白内で<Tab>キーを押すとshiftwidthの数だけインデント.行頭以外ではtabstopの数だけ空白が挿入される.
"" }}}
" 改行時にコメントしない
set formatoptions-=ro
" 改行コードの自動認識
set fileformats=unix,mac,dos
" 検索文字列が小文字の場合は大文字小文字を区別なく検索する
set ignorecase
set smartcase
" 検索時に最後まで行ったら最初に戻る
set wrapscan
" 検索文字列入力時に順次対象文字列にヒットさせる
set incsearch
" コマンドライン補完するときに強化されたものを使う(参照 :help wildmenu)
set wildmenu
" ビープ音をOFFにする
set vb t_vb =
" ステータスラインを常に表示
set laststatus=2
" 括弧入力時の対応する括弧を表示
set showmatch
" IMを使う
set noimdisable
" コマンドラインでのIM無効化
set noimcmdline
" 入力中のコマンドをステータスに表示する
set showcmd
" 対応する括弧の行き来する時間の設定
set matchtime=3
" vimを開いた位置ではなくファイルのディレクトリ位置を起点にする
set browsedir=buffer
" コピペにクリップボードを使用する
" ビジュアルモードで選択したテキストが、クリップボードに入るようにす
set clipboard=unnamed,autoselect
" 文字にアンチエイリアスをかける
if has('mac') && has('gui_running')
set antialias
endif
" 外部のエディタで編集中のファイルが変更されたら自動で読み直す
set autoread
" 辞書ファイルからの単語補間
set complete+=k
" 高速ターミナル接続を行う
set ttyfast
" {{{}}}で折りたたみ
set foldmethod=marker
" カーソル下の単語を help で調べる
set keywordprg=:help
" コマンド表示いらない
set noshowcmd
" コマンド実行中は再描画しない
set lazyredraw
" 読み込んでいるファイルが変更された時自動で読み直す
set autoread
" マルチバイト文字があってもカーソルがずれないようにする
set ambiwidth=double
" 256色
set t_Co=256
" タブ文字を CTRL-I で表示し, 行末に $ で表示する.
" set list
" Listモードに使われる文字を設定する "
"set listchars=tab:\ \ ,trail:-,eol:\
" 勝手に作られる系のファイルを一箇所にまとめる
set directory=~/.vim/swp
set undodir=D:~/.vim/undo
""" }}}
""" Util {{{
" 一定時間カーソルを移動しないとカーソルラインを表示(ただし,ウィンドウ移動時
" はなぜか切り替わらない
" http://d.hatena.ne.jp/thinca/20090530/1243615055
augroup AutoCursorLine
autocmd!
autocmd CursorMoved,CursorMovedI,WinLeave * setlocal nocursorline
autocmd CursorHold,CursorHoldI,WinEnter * setlocal cursorline
augroup END
" imsertモードから抜けるときにIMをOFFにする(GUI(MacVim)は自動的にやってくれる
" iminsert = 2にすると,insertモードに戻ったときに自動的にIMの状態が復元される
if !has("gui-running")
inoremap <silent> <ESC> <ESC>:set iminsert=0<CR>
endif
" ファイルを開いたときに, カレントディレクトリを編集中のファイルディレクトリに変更
augroup grlcd
autocmd!
autocmd BufEnter * lcd %:p:h
augroup END
" :vimgrepでの検索後, QuickFixウィンドウを開く
augroup greopen
autocmd!
autocmd QuickfixCmdPost vimgrep cw
augroup END
" vimrcのリロード
command! ReloadVimrc source $MYVIMRC
" 保存時に行末のスペースを削除
augroup rtrim
function! RTrim()
let s:cursor = getpos(".")
%s/\s\+$//e
call setpos(".", s:cursor)
endfunction
autocmd BufWritePre * call RTrim()
augroup END
" カーソル位置の復元
autocmd MyAutocmd BufReadPost *
\ if line("'\"") > 1 && line("'\"") <= line("$") |
\ exe "normal! g`\"" |
\ endif
" Hack #202: 自動的にディレクトリを作成する
" http://vim-users.jp/2011/02/hack202/
autocmd MyAutocmd BufWritePre * call s:auto_mkdir(expand('<afile>:p:h'), v:cmdbang)
function! s:auto_mkdir(dir, force)
if !isdirectory(a:dir) && (a:force ||
\ input(printf('"%s" does not exist. Create? [y/N]', a:dir)) =~? '^y\%[es]$')
" call mkdir(iconv(a:dir, &encoding, &termencoding), 'p')
call mkdir(a:dir, 'p')
endif
endfunction
" ファイルタイプを書き込み時に自動判別
autocmd MyAutocmd BufWritePost
\ * if &l:filetype ==# '' || exists('b:ftdetect')
\ | unlet! b:ftdetect
\ | filetype detect
\ | endif
" git commit message のときは折りたたまない(diff で中途半端な折りたたみになりがち)
autocmd MyAutocmd FileType gitcommit setlocal nofoldenable
" git のルートディレクトリを開く
function! s:git_root_dir()
if (system('git rev-parse --is-inside-work-tree') == "true\n")
let s:path = system('git rev-parse --show-cdup')
return strpart(s:path, 0, strlen(s:path)-1) " 末尾改行削除
else
echoerr 'current directory is outside git working tree'
endif
endfunction
" 補完色を変更
highlight Pmenu ctermbg=8
highlight PmenuSel ctermbg=1
highlight PmenuSbar ctermbg=0
" 行末のスペースをハイライト
highlight WhitespaceEOL ctermbg=red guibg=red
match WhitespaceEOL /\s\+$/
autocmd MyAutocmd WinEnter * match WhitespaceEOL /\s\+$/
" 挿入モードとノーマルモードでステータスラインの色変更
autocmd MyAutocmd InsertEnter * hi StatusLine guifg=DarkBlue guibg=DarkYellow gui=none ctermfg=Blue ctermfg=Yellow cterm=none
autocmd MyAutocmd InsertLeave * hi StatusLine guifg=DarkBlue guibg=DarkGray gui=none ctermfg=Blue ctermbg=DarkGray cterm=none
" Vim 力を測る Scouter (thinca さん改良版)
" http://d.hatena.ne.jp/thinca/20091031/1257001194
function! Scouter(file, ...)
let pat = '^\s*$\|^\s*"'
let lines = readfile(a:file)
if !a:0 || !a:1
let lines = split(substitute(join(lines, "\n"), '\n\s*\\', '', 'g'), "\n")
endif
return len(filter(lines,'v:val !~ pat'))
endfunction
command! -bar -bang -nargs=? -complete=file Scouter
\ echo Scouter(empty(<q-args>) ? $MYVIMRC : expand(<q-args>), <bang>0)
""" }}}
""" Keymap {{{
" :w1 と打ってしまうくせ防止
cabbrev q1 q!
cabbrev w1 w!
" insertモードから抜ける
inoremap <silent> jj <ESC>
inoremap <silent> <C-j> j
" inoremap <silent> kk <ESC>
" inoremap <silent> <C-k> k
" ; と : をスワップ
inoremap : ;
inoremap ; :
" insertモードでもquit
inoremap <C-q><C-q> <Esc>:wq<CR>
" insertモードでもsave
inoremap <C-w><C-w> <Esc>:w<Insert><CR>
" insertモードでC-s -> Save, C-q -> Quit
inoremap <C-s> <Esc>:w<CR>
inoremap <C-q> <Esc>:q<CR>
"Esc->Escで検索結果とエラーハイライトをクリア
nnoremap <silent><Esc><Esc> :<C-u>nohlsearch<CR>
" 賢く行頭・非空白行頭・行末の移動
nnoremap <silent>0 :<C-u>call <SID>smart_move('g^')<CR>
vnoremap <silent>0 :<C-u>call <SID>smart_move('g^')<CR>
nnoremap <silent>^ :<C-u>call <SID>smart_move('g0')<CR>
vnoremap <silent>^ :<C-u>call <SID>smart_move('g0')<CR>
nnoremap <silent>- :<C-u>call <SID>smart_move('g$')<CR>
vnoremap <silent>- :<C-u>call <SID>smart_move('g$')<CR>
" Visualモード時にvで行末まで選択する
vnoremap v $h
" 選択範囲置換補助
vnoremap <C-r> ::s/\%V
" 表示行単位で行移動する
nmap j gj
nmap k gk
vmap j gj
vmap k gk
" insertモードでのカーソル移動 ポップアップウィンドウがでないように
inoremap <C-e> <END>
vnoremap <C-e> <END>
cnoremap <C-e> <END>
inoremap <C-a> <HOME>
vnoremap <C-a> <HOME>
cnoremap <C-a> <HOME>
inoremap <silent><expr><C-j> pumvisible() ? "\<C-y>\<Down>" : "\<Down>"
inoremap <silent><expr><C-k> pumvisible() ? "\<C-y>\<Up>" : "\<Up>"
inoremap <silent><expr><C-h> pumvisible() ? "\<C-y>\<Left>" : "\<Left>"
inoremap <silent><expr><C-l> pumvisible() ? "\<C-y>\<Right>" : "\<Right>"
cnoremap <C-h> <Left>
cnoremap <C-l> <Right>
" カーソル前の文字削除
inoremap <silent> <C-h> <C-g>u<C-h>
cnoremap <silent> <C-h> <C-g>u<C-h>
" カーソル後の文字削除
inoremap <silent> <C-d> <Del>
cnoremap <silent> <C-d> <Del>
" 引用符, 括弧の設定
inoremap {} {}<Left>
inoremap [] []<Left>
inoremap () ()<Left>
inoremap "" ""<Left>
inoremap '' ''<Left>
inoremap <> <><Left>
inoremap []5 [% %]<Left><Left><Left>
inoremap {}5 {% %}<Left><Left><Left>
inoremap <>5 <% %><Left><Left><Left>
" 空行挿入
nnoremap ; :<C-u>call append(expand('.'), '')<CR>
"ヘルプ表示
nnoremap <Leader>h :<C-u>vert to help<Space>
"<BS>の挙動 いきおいあまっていろいろ消してしまう
" nnoremap <BS> bdw
" 縦方向移動支援
" nnoremap J 3j
" nnoremap K 3k"
" 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 <silent> <S-Left> :5wincmd <<CR>
nnoremap <silent> <S-Right> :5wincmd ><CR>
nnoremap <silent> <S-Up> :5wincmd -<CR>
nnoremap <silent> <S-Down> :5wincmd +<CR>
" 検索後画面の中心に移動
nnoremap n nzvzz
nnoremap N Nzvzz
nnoremap * *zvzz
nnoremap # *zvzz
"バッファ切り替え
nnoremap <silent><C-n> :<C-u>bnext<CR>
nnoremap <silent><C-p> :<C-u>bprevious<CR>
" タブの設定
nnoremap ge :<C-u>tabedit<Space>
nnoremap gn :<C-u>tabnew<CR>
" 初回のみ a:cmd の動きをして,それ以降は行内をローテートする
let s:smart_line_pos = -1
function! s:smart_move(cmd)
let line = line('.')
if s:smart_line_pos == line . a:cmd
call <SID>rotate_in_line()
else
execute "normal! " . a:cmd
" 最後に移動した行とマッピングを保持
let s:smart_line_pos = line . a:cmd
endif
endfunction
" 行頭 → 非空白行頭 → 行 をローテートする by Linda_pp
" http://qiita.com/items/ee4bf64b1fe2c0a32cbd#comment-e2aafa1f4e60ae49a730
function! s:rotate_in_line()
let c = col('.')
if c == 1
let cmd = '^'
else
let cmd = '$'
endif
execute "normal! ".cmd
if c == col('.')
if cmd == '^'
normal! $
else
normal! 0
endif
endif
endfunction
" , に割り当てる
nnoremap <silent>, :<C-u>call <SID>rotate_in_line()<CR>
""" }}}
""" FileType {{{
set autoindent " 自動でインデント
set cindent " Cプログラムファイルの自動インデントを始める.これがあれば smartindent 要らない.
" softtabstopはTabキー押し下げ時の挿入される空白の量,0の場合はtabstopと同じ,BSにも影響する
set tabstop=2 shiftwidth=2 softtabstop=0
"ファイルタイプの検索を有効にする
filetype plugin on
"そのファイルタイプにあわせたインデントを利用する
filetype indent on
augroup FileTypeDetect
autocmd!
autocmd BufNewFile,BufRead cpanfile set filetype=cpanfile
autocmd BufNewFile,BufRead cpanfile set syntax=perl.cpanfile
autocmd BufNewFile,BufRead *.PL,*.t,*.psgi,*.perldb,cpanfile setf perl
autocmd BufNewFile,BufRead *.tx setfiletype xslate " from vim-xslate
autocmd BufNewFile,BufRead Capfile,Thorfile set filetype=ruby
autocmd BufNewFile,BufRead *.html if search('^; ') > 0 | set filetype=xslate | endif
autocmd BufNewFile,BufRead *.hpp,*.cl setf cpp
autocmd BufNewFile,BufRead *.cu,*.hcu setf cuda
autocmd BufNewFile,BufRead *.aj setf java
autocmd BufNewFile,BufRead *.jspx setf xhtml
autocmd BufNewFile,BufRead *.tex,*.latex,*.sty,*.dtx,*.ltx,*.bbl setf tex
autocmd BufNewFile,BufRead *.tt,*.tt2 setf tt2html
autocmd BufNewFile,BufRead *.html setf tt2html
autocmd BufNewFile,BufRead *.{md,mdwn,mkd,mkdn,mark*} setf markdown
autocmd BufNewFile,BufRead *.less setf less
autocmd BufNewFile,BufRead *.coffee setf coffee
autocmd BufNewFile,BufRead *.erb set filetype=eruby.html
autocmd BufNewFile,BufRead *.rs set filetype=rust
augroup END
augroup IndentGroup
autocmd!
" インデント幅4
" setlocal sw=4 sts=4 ts=4 et
autocmd FileType apache setlocal sw=4 sts=4 ts=4 et
autocmd FileType c setlocal sw=4 sts=4 ts=4 et
autocmd FileType cuda setlocal sw=4 sts=4 ts=4 et
autocmd FileType cpp setlocal sw=4 sts=4 ts=4 et
autocmd FileType cs setlocal sw=4 sts=4 ts=4 et
autocmd FileType css setlocal sw=2 sts=2 ts=2 et
autocmd FileType diff setlocal sw=4 sts=4 ts=4 et
autocmd FileType eruby setlocal sw=2 sts=2 ts=2 et
autocmd FileType go setlocal sw=8 sts=8 ts=8 et
autocmd FileType groovy setlocal sw=4 sts=4 ts=4 et
autocmd FileType haml setlocal sw=2 sts=2 ts=2 et
autocmd FileType hpp setlocal sw=4 sts=4 ts=4 et
autocmd FileType html setlocal sw=2 sts=2 ts=2 et
autocmd FileType java setlocal sw=4 sts=4 ts=4 et
autocmd FileType javascript setlocal sw=4 sts=4 ts=4 et
autocmd FileType perl setlocal sw=4 sts=4 ts=4 et
autocmd FileType python setlocal sw=4 sts=4 ts=4 et
autocmd FileType ruby setlocal sw=2 sts=2 ts=2 et
autocmd FileType rust setlocal sw=4 sts=4 ts=4 et
autocmd FileType scala setlocal sw=2 sts=2 ts=2 et
autocmd FileType sh setlocal sw=4 sts=4 ts=4 et
autocmd FileType sql setlocal sw=4 sts=4 ts=4 et
autocmd FileType tex setlocal sw=2 sts=2 ts=2 et
autocmd FileType tt2 setlocal sw=2 sts=2 ts=2 et
autocmd FileType tt2html setlocal sw=2 sts=2 ts=2 et
autocmd FileType vim setlocal sw=2 sts=2 ts=2 et
autocmd FileType xhtml setlocal sw=4 sts=4 ts=4 et
autocmd FileType yaml setlocal sw=2 sts=2 ts=2 et
autocmd FileType zsh setlocal sw=2 sts=2 ts=2 et
let $BOOST_ROOT = "/usr/local/opt/boost/include/boost"
autocmd FileType cpp set path+=$BOOST_ROOT
autocmd FileType perl,cgi compiler perl
autocmd FileType perl,cgi nmap <buffer>,pt <ESC>:%! perltidy<CR> " ソースコード全体を整形
autocmd FileType perl,cgi nmap <buffer>,ptv <ESC>:%'<, '>! perltidy<CR> " 選択された部分のソースコードを整形
autocmd FileType python setlocal cinwords=if,elif,else,for,while,try,except,finally,def,class
autocmd FileType ruby compiler ruby
autocmd FileType ruby setlocal nocompatible
autocmd FileType go setlocal noexpandtab
augroup END
"" ファイル形式毎にテンプレートを設定 {{{
augroup templates
autocmd!
" autocmd BufNewFile *.pl 0r $HOME/.vim/templates/template.pl
" autocmd BufNewFile *.pm 0r $HOME/.vim/templates/template.pl
autocmd BufNewFile *.rb 0r $HOME/.vim/templates/template.rb
autocmd BufNewFile *.py 0r $HOME/.vim/templates/template.py
augroup END
"" }}}
"" +perl, +python, +ruby for MacVim {{{
if has('gui_macvim') && has('kaoriya')
let s:ruby_libdir = system("ruby -rrbconfig -e 'print Config::CONFIG[\"libdir\"]'")
let s:ruby_libruby = s:ruby_libdir . '/libruby.dylib'
if filereadable(s:ruby_libruby)
let $RUBY_DLL = s:ruby_libruby
endif
endif
let $PERL_DLL = "/System/Library/Perl/5.12/darwin-thread-multi-2level/CORE/libperl.dylib"
let $PYTHON_DLL = "$HOME/.pythonz/CPython-2.7.3/lib/libpython2.7.dylib"
"" }}}
" Go {{{
if $GOROOT != ''
set rtp+=$GOROOT/misc/vim
endif
" }}}
"" Functions for Template Toolkit 2 syntax {{{
" http://d.hatena.ne.jp/dayflower/20090626/1245983732
" function! s:FTtt2()
" let save_cursor = getpos('.')
" call cursor(1, 1)
" if search('\<\c\%(html\|head\|body\|div\)', 'cn') > 0
" setf tt2html
" else
" setf tt2
" endif
" call setpos('.', save_cursor)
" endfunction
"
" function! s:FTtt2html()
" let save_cursor = getpos('.')
" call cursor(1, 1)
" if search('\[%', 'cn') > 0
" setlocal filetype=tt2html
" endif
" call setpos('.', save_cursor)
" endfunction
"" }}}
""" }}}
""" Plugins {{{
" neobundle.vim が無ければインストールする
if ! isdirectory(expand('~/.vim/bundle'))
echon "Installing neobundle.vim..."
silent call mkdir(expand('~/.vim/bundle'), 'p')
silent !git clone https://github.com/Shougo/neobundle.vim $HOME/.vim/bundle/neobundle.vim
echo "done."
if v:shell_error
echoerr "neobundle.vim installation has failed!"
finish
endif
endif
if has('vim_starting')
set rtp+=~/.vim/bundle/neobundle.vim/
endif
let s:meet_neocomplete_requirements = has('lua') && (v:version > 703 || (v:version == 703 && has('patch885')))
call neobundle#begin(expand('~/.vim/bundle'))
function! s:cache_bundles()
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/vimproc', {
\ 'build' : {
\ 'mac' : 'make -f make_mac.mak',
\ 'unix' : 'make -f make_unix.mak',
\ }
\ }
NeoBundle 'Shougo/vimfiler'
NeoBundle 'Shougo/vinarise'
NeoBundle 'Shougo/echodoc'
NeoBundle 'Shougo/neosnippet'
NeoBundle 'Shougo/neosnippet-snippets'
NeoBundle 'Shougo/neomru.vim'
" NeoBundle 'Shougo/unite-ssh'
NeoBundle 'thinca/vim-quickrun'
" NeoBundle 'thinca/vim-singleton'
NeoBundle 'osyo-manga/unite-fold'
NeoBundle 'osyo-manga/unite-quickfix'
NeoBundle 'h1mesuke/unite-outline'
NeoBundle 'tsukkee/unite-tag'
NeoBundle 'jceb/vim-hier'
NeoBundle 'thinca/vim-guicolorscheme'
NeoBundle 'Lokaltog/vim-powerline'
NeoBundle 'tomtom/tcomment_vim'
NeoBundle 'vim-scripts/gtags.vim'
NeoBundle 'hewes/unite-gtags'
" NeoBundle 'tpope/vim-bundler'
" NeoBundle 'tpope/vim-rake'
" NeoBundle 'tpope/vim-abolish'
NeoBundle 'tpope/vim-fugitive'
NeoBundle 'kana/vim-operator-user'
NeoBundle 'kana/vim-operator-replace'
NeoBundle 'rhysd/vim-operator-surround'
NeoBundle "kana/vim-textobj-user"
NeoBundle 'osyo-manga/vim-textobj-multiblock'
NeoBundle 'osyo-manga/vim-operator-search'
NeoBundle 'tpope/vim-repeat' " for vim-operator-surround
" NeoBundle 'kana/vim-textobj-function' " for vim-operator-search
" NeoBundle 'thinca/vim-textobj-function-perl' " なぜかlazyloadできない
" NeoBundle 't9md/vim-textobj-function-ruby'
NeoBundle 'rhysd/quickrun-unite-quickfix-outputter'
NeoBundle 'osyo-manga/shabadou.vim'
NeoBundle 'osyo-manga/vim-watchdogs'
NeoBundle 'rhysd/wallaby.vim'
NeoBundle 'rhysd/unite-zsh-cdr.vim'
NeoBundle 'y-uuki/perl-local-lib-path.vim'
NeoBundle 'derekwyatt/vim-scala'
NeoBundle 'airblade/vim-rooter'
" NeoBundle 'osyo-manga/unite-qfixhowm'
" NeoBundle 'rhysd/tmpwin.vim'
NeoBundle 'osyo-manga/vim-over'
NeoBundle 'mhinz/vim-signify'
NeoBundle 'rhysd/conflict-marker.vim'
NeoBundle 'rhysd/clever-f.vim'
" NeoBundle 'rhysd/accelerated-jk'
NeoBundle 'fatih/vim-go'
NeoBundle 'moznion/github-commit-comment.vim'
NeoBundle 'honza/dockerfile.vim'
NeoBundle 'glidenote/memolist.vim'
NeoBundle 'glidenote/serverspec-snippets'
NeoBundle 'majutsushi/tagbar'
NeoBundle 'sorah/unite-ghq'
NeoBundle 'cohama/agit.vim'
NeoBundle 'chase/vim-ansible-yaml'
NeoBundle 'godlygeek/tabular'
NeoBundle 'joker1007/vim-markdown-quote-syntax'
NeoBundle 'rcmdnk/vim-markdown'
if s:meet_neocomplete_requirements
NeoBundle 'Shougo/neocomplete.vim'
else
NeoBundle 'Shougo/neocomplcache.vim'
endif
" colorscheme
NeoBundle 'ujihisa/unite-colorscheme'
NeoBundle 'tomasr/molokai'
NeoBundle 'altercation/vim-colors-solarized'
NeoBundle 'telamon/vim-color-github'
NeoBundle 'earendel'
NeoBundle 'rdark'
NeoBundle 'guicolorscheme.vim'
NeoBundle 'rhysd/wallaby.vim'
NeoBundleLazy 'Shougo/vimshell', {
\ 'autoload' : {
\ 'commands' : ['VimShell', 'VimShellSendString', 'VimShellCurrentDir'],
\ }
\ }
NeoBundleLazy 'y-uuki/unite-perl-module.vim', {
\ 'depends' : [ 'Shougo/unite.vim' ],
\ 'autoload' : {'filetypes' : 'perl'}
\ }
NeoBundleLazy 'benizi/perl-support.vim', {
\ 'autoload' : {'filetypes' : 'perl'}
\ }
NeoBundleLazy 'vim-perl/vim-perl', {
\ 'autoload' : {'filetypes' : 'perl'}
\ }
NeoBundleLazy 'moznion/vim-cpanfile', {
\ 'autoload' : {'filetypes' : 'perl'}
\ }
NeoBundleLazy 'mattn/perlvalidate-vim.git', {
\ 'autoload' : {'filetypes' : 'perl'}
\ }
NeoBundleLazy 'vim-ruby/vim-ruby', {
\ 'autoload' : {'filetypes' : 'ruby'}
\ }
NeoBundleLazy 'rhysd/unite-ruby-require.vim', {
\ 'depends' : [ 'Shougo/unite.vim' ],
\ 'autoload' : {'filetypes' : 'ruby'}
\ }
NeoBundleLazy 'motemen/xslate-vim', {
\ 'autoload' : {'filetypes' : 'xslate'}
\ }
NeoBundleLazy 'vim-jp/cpp-vim', {
\ 'autoload' : {'filetypes' : 'cpp'}
\ }
NeoBundleLazy 'osyo-manga/neocomplcache-clang_complete', {
\ 'autoload' : {'filetypes' : 'cpp'}
\ }
NeoBundleLazy 'kchmck/vim-coffee-script', {
\ 'autoload' : {'filetypes' : 'coffee'}
\ }
NeoBundleLazy 'groenewege/vim-less', {
\ 'autoload' : {'filetypes' : 'less'}
\ }
NeoBundleLazy 'tpope/vim-haml.git', {
\ 'autoload' : {'filetypes' : 'haml'}
\ }
NeoBundleLazy 'zaiste/tmux.vim', {
\ 'autoload' : {'filetypes' : 'tmux'}
\ }
NeoBundleLazy 'micheljansen/vim-latex', {
\ 'autoload' : {'filetypes' : 'latex'}
\ }
NeoBundleLazy 'derekwyatt/vim-scala', {
\ 'autoload' : {'filetypes' : 'scala'}
\ }
NeoBundleLazy 'kana/vim-operator-replace', {
\ 'autoload' : {
\ 'mappings' : '<Plug>(operator-replace)'
\ }
\ }
NeoBundleLazy 'roalddevries/yaml.vim', {
\ 'autoload' : {'filetypes' : 'yaml'}
\ }
NeoBundleLazy 'sudo.vim'
NeoBundleCheck
NeoBundleSaveCache
endfunction
if neobundle#has_cache()
NeoBundleLoadCache
else
call s:cache_bundles()
endif
call neobundle#end()
filetype plugin indent on " required!
autocmd MyAutocmd BufWritePost *vimrc,*gvimrc NeoBundleClearCache
" ReadOnly のファイルを編集しようとしたときに sudo.vim を遅延読み込み
autocmd MyAutocmd FileChangedRO * NeoBundleSource sudo.vim
autocmd MyAutocmd FileChangedRO * execute "command! W SudoWrite" expand('%')
""" }}}
" カラースキーム {{{
" シンタックスハイライト
syntax enable
if !has('gui_running')
if &t_Co < 256
colorscheme default
else
try
colorscheme wallaby
catch
colorscheme desert
endtry
endif
endif
" seoul256 バックグラウンドカラーの明るさ
let g:seoul256_background = 233
" }}}
"" neocomplcache {{{
if s:meet_neocomplete_requirements
" neocomplete用設定
"vim起動時に有効化
let g:neocomplete#enable_at_startup = 1
let g:neocomplete#enable_ignore_case = 1
"smart_caseを有効にする.大文字が入力されるまで大文字小文字の区別をなくす
let g:neocomplete#enable_smart_case = 1
" 日本語を収集しないようにする
if !exists('g:neocomplete#keyword_patterns')
let g:neocomplete#keyword_patterns = {}
endif
let g:neocomplete#keyword_patterns._ = '\h\w*'
let g:neocomplete#enable_camel_case_completion = 1
let g:neocomplete#enable_underbar_completion = 1
" vim起動時に有効化
let g:neocomplete#enable_at_startup = 1
" smart_caseを有効にする.大文字が入力されるまで大文字小文字の区別をなくす
let g:neocomplete#enable_smart_case = 1
" _を区切りとした補完を有効にする
let g:neocomplete#enable_underbar_completion = 1
" シンタックスをキャッシュするときの最小文字長を3に
let g:neocomplete#min_syntax_length = 3
" リスト表示
let g:neocomplete#max_list = 300
let g:neocomplete#max_keyword_width = 20
" 辞書定義
let g:neocomplete#dictionary_filetype_lists = {
\ 'default' : '',
\ 'vimshell' : expand('~/.vimshell/command-history'),
\ 'vim' : '~/.vim/dict/perl_functions.dict',
\ 'cpanfile' : '~/.vim/bundle/vim-cpanfile/dict/cpanfile.dict'
\ }
let g:neocomplete#ctags_arguments_list = {
\ 'perl' : '-R -h ".pm"'
\ }
" 補完の区切り文字
if !exists('g:neocomplete#delimiter_patterns')
let g:neocomplete#delimiter_patterns = {}
endif
let g:neocomplete#delimiter_patterns.vim = ['#']
let g:neocomplete#delimiter_patterns.ruby = ['::']
let g:neocomplete#delimiter_patterns.perl = ['::']
"リスト表示
let g:neocomplete#max_list = 300
"neocompleteのマッピング
inoremap <expr><C-g> neocomplete#undo_completion()
inoremap <expr><C-s> neocomplete#complete_common_string()
" <Tab>: completion
inoremap <expr><Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
"<C-h>, <BS>: close popup and delete backword char.
inoremap <expr><C-h> neocomplete#smart_close_popup()."\<C-h>"
inoremap <expr><BS> neocomplete#smart_close_popup()."\<C-h>"
inoremap <expr><C-y> neocomplete#cancel_popup()
else
" neocomplcache用設定
let g:neocomplcache_enable_at_startup = 1
let g:neocomplcache_enable_ignore_case = 1
let g:neocomplcache_enable_smart_case = 1
if !exists('g:neocomplcache_keyword_patterns')
let g:neocomplcache_keyword_patterns = {}
endif
let g:neocomplcache_keyword_patterns._ = '\h\w*'
let g:neocomplcache_enable_camel_case_completion = 1
let g:neocomplcache_enable_underbar_completion = 1
" vim起動時に有効化
let g:neocomplcache_enable_at_startup = 1
" smart_caseを有効にする.大文字が入力されるまで大文字小文字の区別をなくす
let g:neocomplcache_enable_smart_case = 1
" _を区切りとした補完を有効にする
let g:neocomplcache_enable_underbar_completion = 1
" シンタックスをキャッシュするときの最小文字長を3に
let g:neocomplcache_min_syntax_length = 3
" リスト表示
let g:neocomplcache_max_list = 300
let g:neocomplcache_max_keyword_width = 20
" 辞書定義
let g:neocomplcache_dictionary_filetype_lists = {
\ 'default' : '',
\ 'vimshell' : expand('~/.vimshell/command-history'),
\ 'vim' : '~/.vim/dict/perl_functions.dict',
\ 'cpanfile' : '~/.vim/bundle/vim-cpanfile/dict/cpanfile.dict'
\ }
let g:neocomplcache_ctags_arguments_list = {
\ 'perl' : '-R -h ".pm"'
\ }
" 補完の区切り文字
if !exists('g:neocomplcache_delimiter_patterns')
let g:neocomplcache_delimiter_patterns = {}
endif
let g:neocomplcache_delimiter_patterns.vim = ['#']
let g:neocomplcache_delimiter_patterns.ruby = ['::']
let g:neocomplcache_delimiter_patterns.perl = []
"neocomplcacheのマッピング
inoremap <expr><C-g> neocomplcache#undo_completion()
inoremap <expr><C-s> neocomplcache#complete_common_string()
" <CR>: close popup and save indent.
" <Tab>: completion
inoremap <expr><Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
endif
" AutoComplPopを無効にする
let g:acp_enableAtStartup = 0
if !has("gui_running")
" CUIのvimでの補完リストの色を調節する
highlight Pmenu ctermbg=8
endif
" Enable omni completion.
augroup NeocomplcacheOmniFunc
autocmd!
autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html setlocal omnifunc=htmlcomplete#CompleteTags
autocmd FileType css setlocal omnifunc=csscomplete#CompleteCss
autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags
autocmd FileType php setlocal omnifunc=phpcomplete#CompletePHP
autocmd FileType c setlocal omnifunc=ccomplete#Complete
" autocmd FileType ruby set omnifunc=rubycomplete#Complete
augroup END
"" }}}
"" neosnippet {{{
" http://kazuph.hateblo.jp/entry/2012/11/28/105633
imap <C-b> <Plug>(neosnippet_expand_or_jump)
smap <C-b> <Plug>(neosnippet_expand_or_jump)
" SuperTab like snippets behavior.
imap <expr><TAB> neosnippet#expandable() <Bar><bar> neosnippet#jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : pumvisible() ? "\<C-n>" : "\<TAB>"
smap <expr><TAB> neosnippet#expandable() <Bar><bar> neosnippet#jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"
" For snippet_complete marker.
if has('conceal')
set conceallevel=2 concealcursor=i
endif
"" }}}
" 自作スニペット {{{
let g:neosnippet#snippets_directory = [
\'~/.vim/snippets/snippets',
\'~/.vim/bundle/serverspec-snippets',
\]
"" }}}
"" unite.vim {{{
let g:unite_prompt = '> '
" insertモードをデフォルトに
let g:unite_enable_start_insert = 1
" 無指定にすることで高速化
let g:unite_source_file_mru_filename_format = ''
" most recently used のリストサイズ
let g:unite_source_file_mru_limit = 100
" Unite起動時のウィンドウ分割
let g:unite_split_rule = 'rightbelow'
" 使わないデフォルト Unite ソースをロードしない
let g:loaded_unite_source_bookmark = 1
let g:loaded_unite_source_window = 1
" unite-grep で使うコマンド
let g:unite_source_grep_default_opts = "-Hn --color=never"
" the silver searcher を unite-grep のバックエンドにする
if executable('ag')
let g:unite_source_grep_command = 'ag'
let g:unite_source_grep_default_opts = '--nocolor --nogroup --column'
let g:unite_source_grep_recursive_opt = ''
endif
" unite のデフォルトアクション
call unite#custom#default_action('directory' , 'vimfiler')
" unite.vim カスタムアクション
function! s:define_unite_actions()
" Git リポジトリのすべてのファイルを開くアクション {{{
let git_repo = { 'description' : 'all file in git repository' }
function! git_repo.func(candidate)
if(unite#util#system('git rev-parse --is-inside-work-tree') ==# "true\n" )
execute 'args'
\ join( filter(split(system('git ls-files `git rev-parse --show-cdup`'), '\n')
\ , 'empty(v:val) || isdirectory(v:val) || filereadable(v:val)') )
else
echoerr 'Not a git repository!'
endif
endfunction
call unite#custom_action('file', 'git_repo_files', git_repo)
" }}}
" ファイルなら開き,ディレクトリなら VimFiler に渡す {{{
let open_or_vimfiler = {
\ 'description' : 'open a file or open a directory with vimfiler',
\ 'is_selectable' : 1,
\ }
function! open_or_vimfiler.func(candidates)
for candidate in a:candidates
if candidate.kind ==# 'directory'
execute 'VimFiler' candidate.action__path
return
endif
endfor
execute 'args' join(map(a:candidates, 'v:val.action__path'), ' ')
endfunction
call unite#custom_action('file', 'open_or_vimfiler', open_or_vimfiler)
"}}}
" Finder for Mac
if has('mac')
let finder = { 'description' : 'open with Finder.app' }
function! finder.func(candidate)
if a:candidate.kind ==# 'directory'
call system('open -a Finder '.a:candidate.action__path)
endif
endfunction
call unite#custom_action('directory', 'finder', finder)
endif
" load once
autocmd! UniteCustomActions
endfunction
" カスタムアクションを遅延定義
augroup UniteCustomActions
autocmd!
autocmd FileType unite,vimfiler call <SID>define_unite_actions()
augroup END
nnoremap [unite] <Nop>
nmap <Space> [unite]
"バッファを開いた時のパスを起点としたファイル検索
nnoremap <silent> [unite]ff :<C-u>UniteWithBufferDir -buffer-name=files file -vertical<CR>
" 最近使用したファイル一覧
nnoremap <silent> [unite]m :<C-u>Unite file_mru<CR>
" ファイル一覧
nnoremap <silent> [unite]f :<C-u>Unite -buffer-name=files file<CR>
" バッファ一覧
nnoremap <silent> [unite]b :<C-u>Unite buffer<CR>
" Unite ソース一覧
nnoremap <silent> [unite]s :<C-u>Unite source -vertical<CR>
" 常用セット
nnoremap <silent> [unite]u :<C-u>Unite -no-split buffer file_mru<CR>
" 現在のバッファのカレントディレクトリからファイル一覧
nnoremap <silent> [unite]d :<C-u>UniteWithBufferDir -no-split file<CR>
"バッファを開いた時のパスを起点としたファイル検索
nnoremap <silent>[unite]<Space> :<C-u>UniteWithBufferDir -buffer-name=files file -vertical<CR>
" grep検索
nnoremap <silent> [unite]G :<C-u>Unite -no-start-insert grep<CR>
" Uniteバッファの復元
nnoremap <silent> [unite]r :<C-u>UniteResume<CR>
" バッファ全体
nnoremap <silent> [unite]L :<C-u>Unite line<CR>
" ブックマーク一覧
nnoremap <silent> [unite]c :<C-u>Unite bookmark<CR>
" ブックマークに追加
nnoremap <silent> [unite]a :<C-u>UniteBookmarkAdd<CR>
" スニペット候補表示
nnoremap <silent> [unite]s <Plug>(neocomplcache_start_unite_snippet)
" Git のルートディレクトリを開く
" nnoremap <silent><expr>[unite]fg :<C-u>Unite file -input=".fnamemodify(<SID>git_root_dir(),":p")
" プロジェクトのファイル一覧
nnoremap <silent>[unite]p :<C-u>Unite file_rec:! file/new<CR>
" 検索に unite-lines を使う
nnoremap <silent><expr> [unite]/ line('$') > 5000 ?
\ ":\<C-u>Unite -buffer-name=search -no-split -start-insert line/fast\<CR>" :
\ ":\<C-u>Unite -buffer-name=search -start-insert line\<CR>"
" zsh の cdr コマンド
nnoremap <silent>[unite]z :<C-u>Unite zsh-cdr<CR>
" unite-ghq + cdr
nnoremap <silent>[unite]q :<C-u>Unite -start-insert -default-action=vimfiler zsh-cdr ghq directory_mru<CR>
" git常用
" nnoremap <silent> [unite]ga :<C-u>Unite -no-split git_cached git_untracked<CR>
" " git ls-files一覧
" nnoremap <silent> [unite]g :<C-u>Unite -no-split git_cached<CR>
" " git modefied一覧
" nnoremap <silent> [unite]gm :<C-u>Unite -no-split git_modified<CR>
" " git untracked一覧
" nnoremap <silent> [unite]gu :<C-u>Unite -no-split git_untracked<CR>
" project検索
call unite#custom#source('file_rec/async', 'ignore_pattern', '\(png\|gif\|jpeg\|jpg\tar.gz\)$')
let g:unite_source_rec_max_cache_files = 500000
nnoremap <silent> [unite]v :<C-u>Unite -start-insert file_rec/async:!<CR>
"" unite-perl-module
" Perl local lib modules
autocmd MyAutocmd FileType perl nnoremap <buffer>[unite]pl :<C-u>Unite perl/local<CR>
" Perl global lib modules
autocmd MyAutocmd FileType perl nnoremap <buffer>[unite]pg :<C-u>Unite perl/global<CR>
"" unite-gtags
nnoremap <silent> [unite]gc :<C-u>Unite gtags/context<CR>
nnoremap <silent> [unite]gr :<C-u>Unite gtags/ref<CR>