1 " Bundle ------------------------------------------------------------------ {{{
2 " Sun Sep 21 00:46:43 CST 2014
3 " refer https://github.com/connermcd/dotfiles.git
4 " and https://bitbucket.org/sjl/dotfiles
8 set rtp+=~/.vim/bundle/Vundle.vim
11 Plugin 'gmarik/Vundle.vim'
12 Bundle 'vim-scripts/FuzzyFinder'
13 Bundle 'vim-scripts/L9'
14 Bundle 'Valloric/YouCompleteMe'
15 Bundle 'octol/vim-cpp-enhanced-highlight'
16 Bundle 'bling/vim-airline'
17 Bundle 'payneseu/nerdtree'
18 Bundle 'Townk/vim-autoclose'
19 Bundle 'majutsushi/tagbar'
20 Bundle 'vim-scripts/tcd.vim'
21 Bundle 'vim-scripts/cmdline-completion'
22 Bundle 'vim-scripts/vcscommand.vim'
23 Bundle 'Lokaltog/vim-easymotion'
24 "Bundle 'vim-scripts/YankRing.vim'
25 Bundle 'vim-scripts/gtags.vim'
26 Bundle 'kshenoy/vim-signature'
27 Bundle 'nathanaelkane/vim-indent-guides'
29 Bundle 'payneseu/mark-2.8.4'
30 "Bundle 'derekwyatt/vim-fswitch'
31 Bundle 'sjl/gundo.vim'
32 Bundle 'tpope/vim-markdown'
33 "Bundle 'vim-scripts/BreakPts'
34 "Bundle 'vim-scripts/genutils'
35 "Bundle 'vim-scripts/Marks-Browser'
36 Bundle 'MattesGroeger/vim-bookmarks'
39 filetype plugin indent on
42 " Basic options ----------------------------------------------------------- {{{
57 set diffopt=filler,vertical
60 set listchars=tab:▸\ ,eol:¬,extends:❯,precedes:❮
68 set completeopt=longest,menuone
70 "set wildmode=list:longest
72 set wildignore=*.o,*.obj,*~,*.swp,*.DS_Store,*.git,*.svn,*.hg
77 set nostartofline " don't jump to first character when paging
79 "set textwidth, formatoptions for chinese
86 set macmeta "" Macvim only
89 set guifont=Sauce\ Code\ Powerline\ Light:h11
90 highlight Cursor guifg=white guibg=green
91 set guicursor=a:blinkon0
98 " http://sourceforge.net/mailarchive/forum.php?thread_name=AANLkTinkbdoZ8eNR1X2UobLTeww1jFrvfJxTMfKSq-L%2B%40mail.gmail.com&forum_name=tmux-users
99 "https://gist.github.com/andyfowler/1195581
101 let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\"
102 let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\"
104 let &t_SI = "\<Esc>]50;CursorShape=1\x7"
105 let &t_EI = "\<Esc>]50;CursorShape=0\x7"
111 " Mappings ---------------------------------------------------------------- {{{
114 " Normal mode ------------------------------------------------------------- {{{
121 nmap <Leader>w :w<CR>
122 nmap <Leader>q :q<CR>
123 nmap <Leader>e :e<Space>
124 nmap <Leader>W :w !sudo tee %<CR>
125 nmap <Leader>h :vertical help<Space>
126 nmap <Leader>t :tabedit<Space>
127 "nmap <Leader>x :x<CR>
134 nnoremap <Leader>v <C-W>v
135 nnoremap <Leader>s <C-W>s
143 nnoremap <C-D> <C-D>zz
144 nnoremap <C-U> <C-U>zz
146 nnoremap <SPACE> <C-F>
147 nnoremap <S-SPACE> <C-B>
151 "nmap <A-TAB> :bn<CR>
152 " map <A-TAB> Alt+TAB
153 "noremap <A-S-TAB> "input C-V then input key sequence to
154 "http://vim.wikia.com/wiki/Make_Shift-Tab_work
155 nnoremap <ESC><TAB> :bn<CR>
156 nnoremap
\e\19 :bp<CR>
157 "nmap <A-S-TAB> :bp<CR>
158 "nmap <A-SPACE> :b#<CR>
159 "nmap <Leader>d :bd<CR>
160 "" keymappig for register operations
161 nnoremap <Leader>r :registers<CR>
162 "noremap <Leader>x :<C-p>
168 nmap <A-=> :resize<CR>:vertical resize<CR>
169 nmap
\e= :resize<CR>:vertical resize<CR>
179 noremap <Leader>z zmzvzz
180 nmap \\ :nohlsearch<CR>
182 " Insert mode ------------------------------------------------------------- {{{
184 inoremap <C-U> <C-G>u<C-U>
185 inoremap <C-a> <Home>
188 inoremap <C-b> <S-Left>
189 inoremap <C-f> <S-Right>
190 imap <A-d> <S-Right><C-w>
192 " Command mode ------------------------------------------------------- {{{
194 cnoremap <C-A> <Home>
196 cnoremap <C-B> <Left>
197 cnoremap <C-F> <Right>
201 if has("gui_running")
202 " only for Macvim <D-Left> D is Command key
206 cnoremap <A-b> <S-Left>
207 cnoremap <A-f> <S-Right>
208 cnoremap <A-d> <S-Right><S-Right><S-Left><C-w>
210 cnoremap
\eb <S-Left>
211 cnoremap
\ef <S-Right>
212 cnoremap
\ed <S-Right><S-Right><S-Left><C-w>
214 " delet a word left of cursor
217 " Visual mode ------------------------------------------------------------- {{{
218 "" key mapping for visul mode
225 " Plugins Configuration --------------------------------------------------- {{{
226 " Fuzzy Finder ------------------------------------------------------------ {{{
227 let g:fuf_modesDisable = []
228 let g:fuf_mrufile_maxItem = 400
229 let g:fuf_mrucmd_maxItem = 400
230 let g:fuf_file_exclude = '\v\~$|\.(DS_Store|o|exe|dll|bak|orig|swp|pyc)$|(^|[/\\])\.(hg|git|bzr|svn)($|[/\\])'
231 let g:fuf_buffertag_ctagsPath = '/usr/local/bin/ctags'
232 let g:fuf_enumeratingLimit = 30
233 nnoremap <silent> sj :FufBuffer<CR>
234 nnoremap <silent> sk :FufFileWithCurrentBufferDir<CR>
235 nnoremap <silent> sK :FufFileWithFullCwd<CR>
236 nnoremap <silent> s<C-k> :FufFile<CR>
237 nnoremap <silent> sl :FufCoverageFileChange<CR>
238 nnoremap <silent> sL :FufCoverageFileChange<CR>
239 nnoremap <silent> s<C-l> :FufCoverageFileRegister<CR>
240 nnoremap <silent> sd :FufDirWithCurrentBufferDir<CR>
241 nnoremap <silent> sD :FufDirWithFullCwd<CR>
242 nnoremap <silent> s<C-d> :FufDir<CR>
243 nnoremap <silent> sn :FufMruFile<CR>
244 nnoremap <silent> sN :FufMruFileInCwd<CR>
245 nnoremap <silent> sm :FufMruCmd<CR>
246 nnoremap <silent> su :FufBookmarkFile<CR>
247 nnoremap <silent> s<C-u> :FufBookmarkFileAdd<CR>
248 vnoremap <silent> s<C-u> :FufBookmarkFileAddAsSelectedText<CR>
249 nnoremap <silent> si :FufBookmarkDir<CR>
250 nnoremap <silent> s<C-i> :FufBookmarkDirAdd<CR>
251 nnoremap <silent> sT :FufTag<CR>
252 nnoremap <silent> st :FufTag!<CR>
253 nnoremap <silent> s<C-]> :FufTagWithCursorWord!<CR>
254 nnoremap <silent> s, :FufBufferTag<CR>
255 nnoremap <silent> s< :FufBufferTag!<CR>
256 vnoremap <silent> s, :FufBufferTagWithSelectedText!<CR>
257 vnoremap <silent> s< :FufBufferTagWithSelectedText<CR>
258 nnoremap <silent> s} :FufBufferTagWithCursorWord!<CR>
259 "nnoremap <silent> s. :FufBufferTagAll<CR>
260 "nnoremap <silent> s> :FufBufferTagAll!<CR>
261 "vnoremap <silent> s. :FufBufferTagAllWithSelectedText!<CR>
262 "vnoremap <silent> s> :FufBufferTagAllWithSelectedText<CR>
263 "nnoremap <silent> s] :FufBufferTagAllWithCursorWord!<CR>
264 nnoremap <silent> sG :FufTaggedFile<CR>
265 nnoremap <silent> sg :FufTaggedFile!<CR>
266 nnoremap <silent> so :FufJumpList<CR>
267 nnoremap <silent> sp :FufChangeList<CR>
268 nnoremap <silent> sq :FufQuickfix<CR>
269 nnoremap <silent> sy :FufLine<CR>
270 " nnoremap <silent> sh :FufHelp<CR>
271 nnoremap <silent> se :FufEditDataFile<CR>
272 nnoremap <silent> sr :FufRenewCache<CR>
274 " YouCompleteMe ----------------------------------------------------------- {{{
275 "syntax on, must before the YCM,
277 let g:ycm_collect_identifiers_from_tags_files = 1
278 let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
279 let g:ycm_auto_trigger = 1
280 let g:ycm_seed_identifiers_with_syntax = 1
281 let g:ycm_show_diagnostics_ui = 0
282 let g:ycm_enable_diagnostic_signs = 0
283 set completeopt-=preview " disable preview windows for completion
284 let g:ycm_confirm_extra_conf = 0
285 " delete default mapping for <leader>d
286 let g:ycm_key_detailed_diagnostics = ''
289 " Airline ----------------------------------------------------------------- {{{
290 "if has("gui_running")
292 let g:airline_mode_map = {
306 let g:airline_theme = 'badwolf'
308 "if has("gui_running")
309 let g:airline_powerline_fonts=1
310 let g:airline_left_sep = ''
311 let g:airline_left_alt_sep = ''
312 let g:airline_right_sep = ''
313 let g:airline_right_alt_sep = ''
315 let g:airline#extensions#tabline#show_buffers = 1
316 let g:airline#extensions#tabline#enabled = 1
317 let g:airline#extensions#tabline#left_sep = ''
318 let g:airline#extensions#tabline#left_alt_sep =''
319 let g:airline#extensions#tagbar#enabled = 1
321 " let g:airline_powerline_fonts=1
322 " let g:airline_left_sep = ''
323 "" let g:airline_left_alt_sep = ''
324 " let g:airline_right_sep = ''
325 "" let g:airline_right_alt_sep = ''
327 " let g:airline#extensions#tabline#show_buffers = 0
328 " let g:airline#extensions#tabline#enabled = 1
329 " let g:airline#extensions#tabline#left_sep = ''
330 "" let g:airline#extensions#tabline#left_alt_sep =''
331 " let g:airline#extensions#tagbar#enabled = 1
334 " let g:airline_section_a = 'N'
335 let g:airline_section_b = '%f%m'
336 let g:airline_section_c = ''
337 let g:airline_section_x = '[%-.50{CurDir()}]'
338 let g:airline_section_y = '%y'
339 let g:airline_section_z = '%c, %l/%L %p%%'
340 let g:airline_section_warning = '' " (syntastic, whitespace)
343 set statusline=\ %<%F%m%=[%-.50{CurDir()}]\ %y\ %c,\ %l/%L\ \ %p%%\
345 let curdir = substitute(getcwd(), $HOME, "~", "g")
351 " NerdTree ---------------------------------------------------------------- {{{
352 nmap <Leader>n :NERDTreeToggle<CR>
353 nmap <Leader>N :NERDTreeFind<CR>
355 " AutoClose --------------------------------------------------------------- {{{
356 let g:AutoCloseProtectedRegions = ["Dialog", "ThoughBubble"]
358 " TagBar ------------------------------------------------------------------ {{{
359 noremap <Leader>f :TagbarToggle<CR><C-w>l
360 let Tlist_Ctags_Cmd="/usr/local/bin/ctags"
362 " Tcd --------------------------------------------------------------------- {{{
365 " cmdline-completion ------------------------------------------------------ {{{
366 "http://foocoder.com/blog/mei-ri-vimcha-jian-suo-jin-xian-shi-vim-indent-guides.html/
367 cmap <C-J> <Plug>CmdlineCompletionBackward
368 cmap <C-K> <Plug>CmdlineCompletionForward
370 " VSCCommand -------------------------------------------------------------- {{{
371 "" ============== VCSCommand.vim =====================
372 "let VCSCommandSVKExec='disabled no such executable'
373 let VCSCommandDeleteOnHide=1
374 let VCSCommandDisableMappings=1
375 "let VCSCommandEnableBufferSetup=1
376 "nmap <Leader>sd :VCSVimDiff<CR>
378 autocmd User VCSBufferCreated silent! nmap <unique> <buffer> q :bwipeout<cr> | setlocal nomodifiable
380 nmap <Leader>dg :diffget<CR>
382 " YankRing ---------------------------------------------------------------- {{{
383 let g:yankring_min_element_length = 2
385 let g:yankring_replace_n_pkey = '<A->>'
386 let g:yankring_replace_n_nkey = '<A-<>'
387 let g:yankring_history_dir = "$HOME/.vim/temp/"
389 " Gtags ------------------------------------------------------------------- {{{
390 if has("gui_running")
391 noremap <A-.> :Gtags<CR>
392 noremap <A-r> :Gtags -r<CR>
393 noremap <A-o> :Gtags -s<CR>
394 noremap <A-g> :Gtags -g<CR>
396 noremap
\e. :Gtags<CR>
397 noremap
\er :Gtags -r<CR>
398 " noremap j :Gtags -s<CR>
399 noremap
\eg :Gtags -g<CR>
402 " Marks ------------------------------------------------------------------- {{{
403 nmap \h <Plug>MarkSet
404 nmap * <Plug>MarkSearchNext
405 nmap # <Plug>MarkSearchPrev
407 " Gundo ------------------------------------------------------------------- {{{
408 " nnoremap <F5> :GundoToggle<CR>
410 " Bookmarks --------------------------------------------------------------- {{{
412 let g:bookmark_save_per_working_dir = 1
413 let g:bookmark_auto_close = 1
414 let g:bookmark_auto_save = 1
415 " unmap the default mapping in plugins
416 nmap <Plug>DisableBookmarkToggle <Plug>BookmarkToggle
417 nmap <Plug>DisableBookmarkAnnotate <Plug>BookmarkAnnotate
418 nmap <Plug>DisableBookmarkShowAll <Plug>BookmarkShowAll
419 nmap <Plug>DisableBookmarkNext <Plug>BookmarkNext
420 nmap <Plug>DisableBookmarkPrev <Plug>BookmarkPrev
421 nmap <Plug>DisableBookmarkClear <Plug>BookmarkClear
422 nmap <Plug>DisableBookmarkClearAll <Plug>BookmarkClearAll
424 nmap mm <Plug>BookmarkToggle
425 " nmap ,i <Plug>BookmarkAnnotate
426 nmap \m <Plug>BookmarkShowAll
427 let g:bookmark_center = 1
428 let g:bookmark_auto_close = 1
429 "let g:bookmark_highlight_lines = 1
430 " nmap ,j <Plug>BookmarkNext
431 " nmap ,k <Plug>BookmarkPrev
432 " nmap ,c <Plug>BookmarkClear
433 " nmap ,x <Plug>BookmarkClearAll
437 " FileType ---------------------------------------------------------------- {{{
438 autocmd BufNewFile,BufRead *.log set filetype=logecc
439 autocmd BufNewFile,BufRead *.log.[0-9] set filetype=logecc
440 autocmd BufNewFile,BufRead *tmux.conf set filetype=tmux
441 autocmd BufNewFile,BufRead SConstruct set filetype=python
442 autocmd BufNewFile,BufRead SConscript* set filetype=python
443 autocmd BufNewFile,BufReadPost *.md set filetype=markdown
444 autocmd BufNewFile,BufRead *.c set filetype=cpp
446 " http://vim.wikia.com/wiki/Update_the_diff_view_automatically
447 autocmd InsertLeave,BufWritePost,CursorHold * if &diff == 1 | diffupdate | endif
448 " setlocal nomodifiable for svn diff
449 autocmd BufWinEnter *.svn-base setlocal nomodifiable
451 autocmd WinEnter * nnoremap <buffer> gj @=(&diff)?']czz':'gj'<CR> |
452 \ nnoremap <buffer> gk @=(&diff)?'[czz':'gk'<CR>
454 autocmd FileType qf nnoremap <buffer> <silent> q :q<CR> | setlocal nowrap | setlocal nocursorline
455 autocmd FileType help nnoremap <buffer> <silent> q :q<CR> | vertical resize 85;
456 autocmd FileType c,cpp setlocal foldmethod=syntax |
457 \ let b:AutoClosePairs = AutoClose#DefaultPairsModified("\"", "{}") |
458 \ inoremap <buffer> { {<CR>}<ESC>kA<CR>
459 autocmd FileType python setlocal foldmethod=indent
461 autocmd FileType xml setlocal foldmethod=syntax |
462 \ let g:xml_syntax_folding=1
463 autocmd FileType vim setlocal foldmethod=marker |
464 \ setlocal formatoptions-=c formatoptions-=r formatoptions-=o |
465 \ let b:AutoClosePairs = AutoClose#DefaultPairsModified("", "{} \"")
467 autocmd Filetype markdown setlocal textwidth=80
469 autocmd CmdwinEnter * map <buffer> q :q<CR>
472 " Functions --------------------------------------------------------------- {{{
473 " DiffOrig ---------------------------------------------------------------- {{{
474 " refert vimrc_example.vim
475 " Convenient command to see the difference between the current buffer and the
476 " file it was loaded from, thus the changes you made.
477 " Only define it when not defined already.
478 if !exists(":DiffOrig")
479 command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
480 \ | wincmd p | diffthis
483 " Fold Quickfix ----------------------------------------------------------- {{{
484 "http://vim.wikia.com/wiki/Show_only_lines_in_quickfix_list_for_current_buffer
485 if ! exists('g:foldmisses_context')
486 let g:foldmisses_context = 0
489 " Add manual fold from line1 to line2, inclusive.
490 function! s:Fold(line1, line2)
492 execute a:line1.','.a:line2.'fold'
496 " Return list of line numbers for current buffer found in quickfix list.
497 function! s:GetHitLineNumbers(list)
500 if d.valid && d.bufnr == bufnr('')
501 call add(result, d.lnum)
507 function! s:FoldMisses(list, context)
508 setlocal foldmethod=manual
510 let extra = a:context == 99999 ? g:foldmisses_context : a:context
512 for lnum in s:GetHitLineNumbers(a:list)
513 " let start = last==0 ? 1 : last+extra
514 let start = last==0 ? 1 : last+1+extra
515 call s:Fold(start, lnum-1-extra)
518 call s:Fold(last+1+extra, line('$'))
519 " call s:Fold(last+extra, line('$'))
522 ":[N]FoldMisses [N] Show only the lines (and surrounding [N] lines
523 ":[N]FoldLMisses [N] of context) in the current buffer that appear
524 " in the quickfix / location list.
525 " Missed, error-free lines are folded away.
526 command! -bar -count=99999 FoldMisses call s:FoldMisses(getqflist(), <count>)
527 command! -bar -count=99999 FoldLMisses call s:FoldMisses(getloclist(0), <count>)
529 " ToggleList -------------------------------------------------------------- {{{
530 "http://vim.wikia.com/wiki/Toggle_to_open_or_close_the_quickfix_window
531 function! GetBufferList()
538 function! ToggleList(bufname, pfx)
539 let buflist = GetBufferList()
540 for bufnum in map(filter(split(buflist, '\n'), 'v:val =~ "'.a:bufname.'"'), 'str2nr(matchstr(v:val, "\\d\\+"))')
541 if bufwinnr(bufnum) != -1
546 if a:pfx == 'l' && len(getloclist(0)) == 0
548 echo "Location List is Empty."
558 nmap <silent> \l :call ToggleList("Location List", 'l')<CR>
559 nmap <silent> \q :call ToggleList("Quickfix List", 'c')<CR>
561 " DiffToggle -------------------------------------------------------------- {{{
562 "if !exists(":DiffToggle")
565 function! DiffToggle()
567 diffoff | wincmd h | wincmd o
569 exec ":VCSVimDiff" | wincmd h
572 nnoremap \d :call DiffToggle()<CR>
573 "noremap <Leader>d @=(&diff)?':diffoff':":VCSVimDiff"<CR><CR>
578 "nnoremap <silent> <Space> @=(foldlevel('.')?'za':"\<Space>")<CR>
579 nnoremap <silent> <Space> @=(foldlevel('.')?'za':"\<Space>")<CR>
580 "noremap <Leader>d @=(&diff)?':diffoff':":VCSVimDiff"<CR><CR>
582 " https://bitbucket.org/sjl/dotfiles/src/tip/vim/vimrc
583 " Make sure Vim returns to the same line when you reopen a file.
588 \ if line("'\"") > 0 && line("'\"") <= line("$") |
589 \ execute 'normal! g`"zvzz' |
593 iabbrev -... <C-R>=repeat('-', 80 - col(".") - 4 ) . " {{{"
597 " to show the key sequence when pressing some key,
603 " some prefix for mapping
610 nnoremap <C-N> :cn<CR>
611 nnoremap <C-P> :cp<CR>
612 "http://dougblack.io/words/a-good-vimrc.html