" Bundle ------------------------------------------------------------------ {{{ " Sun Sep 21 00:46:43 CST 2014 " refer https://github.com/connermcd/dotfiles.git " and https://bitbucket.org/sjl/dotfiles set nocompatible filetype off set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() Plugin 'gmarik/Vundle.vim' Bundle 'vim-scripts/FuzzyFinder' Bundle 'vim-scripts/L9' Bundle 'Valloric/YouCompleteMe' Bundle 'octol/vim-cpp-enhanced-highlight' Bundle 'vim-airline/vim-airline' Bundle 'vim-airline/vim-airline-themes' Bundle 'payneseu/nerdtree' Bundle 'Townk/vim-autoclose' Bundle 'majutsushi/tagbar' Bundle 'vim-scripts/tcd.vim' Bundle 'vim-scripts/cmdline-completion' Bundle 'vim-scripts/vcscommand.vim' Bundle 'Lokaltog/vim-easymotion' "Bundle 'vim-scripts/YankRing.vim' Bundle 'vim-scripts/gtags.vim' Bundle 'kshenoy/vim-signature' Bundle 'nathanaelkane/vim-indent-guides' Bundle 'rking/ag.vim' Bundle 'payneseu/mark-2.8.4' "Bundle 'derekwyatt/vim-fswitch' Bundle 'sjl/gundo.vim' Bundle 'tpope/vim-markdown' "Bundle 'vim-scripts/BreakPts' "Bundle 'vim-scripts/genutils' "Bundle 'vim-scripts/Marks-Browser' Bundle 'MattesGroeger/vim-bookmarks' "Bundle 'tpope/vim-repeat' "Bundle 'kien/ctrlp.vim' "disable since some conflicting mapping Bundle 'vim-latex/vim-latex' Plugin 'vimperator/vimperator.vim' call vundle#end() filetype plugin indent on " }}} " Basic options ----------------------------------------------------------- {{{ set number set relativenumber set tabstop=4 set softtabstop=4 set shiftwidth=4 set smartindent set smarttab set vb t_vb= set scrolloff=5 set sidescroll=10 set history=1000 set ruler set showcmd set incsearch set hidden set diffopt=filler,vertical "set list set listchars=tab:▸\ ,eol:¬,extends:❯,precedes:❮ set ttymouse=xterm2 set mouse=a set splitbelow set splitright set nobackup set noswapfile set magic set completeopt=longest,menuone set ttyfast "set wildmode=list:longest set wildmenu set wildignore=*.o,*.obj,*~,*.swp,*.DS_Store,*.git,*.svn,*.hg set lazyredraw set hlsearch set autoindent set confirm set nostartofline " don't jump to first character when paging set wrap set expandtab "set textwidth, formatoptions for chinese set formatoptions+=m set colorcolumn=+1 syntax on " colorscheme {{{ set cursorline if has("gui_running") set macmeta "" Macvim only colorscheme molokai set guioptions+=c set guifont=Source\ Code\ Pro\ Light:h11 highlight Cursor guifg=white guibg=green set guicursor=a:blinkon0 set guioptions=eac " set lines=999 " set columns=999 else set t_Co=256 colorscheme molokai22 " http://sourceforge.net/mailarchive/forum.php?thread_name=AANLkTinkbdoZ8eNR1X2UobLTeww1jFrvfJxTMfKSq-L%2B%40mail.gmail.com&forum_name=tmux-users "https://gist.github.com/andyfowler/1195581 if exists('$TMUX') let &t_SI = "\Ptmux;\\]50;CursorShape=1\x7\\\" let &t_EI = "\Ptmux;\\]50;CursorShape=0\x7\\\" else let &t_SI = "\]50;CursorShape=1\x7" let &t_EI = "\]50;CursorShape=0\x7" endif" endif " }}} " }}} " Mappings ---------------------------------------------------------------- {{{ let mapleader = ";" map Q gq " Normal mode ------------------------------------------------------------- {{{ nnoremap Y y$ nnoremap ' ` nnoremap ` ' nnoremap J nnoremap K nmap w :w nmap q :q nmap e :e nmap W :w !sudo tee % nmap h :vertical help nmap t :tabedit % "nmap x :x " windows nmap h nmap j nmap l nmap k nnoremap v v nnoremap s s "nnoremap so o nmap + 3+ nmap - 3- nmap < 3< nmap > 3> nmap = = nnoremap zz nnoremap zz "nnoremap nnoremap nnoremap nnoremap gt nnoremap gT "nmap :bn " map Alt+TAB "noremap "input C-V then input key sequence to "http://vim.wikia.com/wiki/Make_Shift-Tab_work "nnoremap :bn nnoremap :tabnext "nnoremap  :bp nnoremap  :tabprevious "nmap :bp "nmap :b# "nmap d :bd "" keymappig for register operations ""TODO check if this already mapping "nnoremap r :registers "noremap x : nnoremap a : nmap p "*p " also works :r !pbpaste nmap :resize:vertical resize nmap = :resize:vertical resize nnoremap n nzzzv nnoremap N Nzzzv nnoremap g; g;zzzv nnoremap g, g,zzzv nnoremap zR zRzz nnoremap zr zrzz nnoremap zn znzz nnoremap zj zjzz nnoremap zh zhzz noremap z zmzvzz nmap \\ :nohlsearch " }}} " Insert mode ------------------------------------------------------------- {{{ inoremap jj inoremap u inoremap inoremap inoremap inoremap inoremap imap " }}} " Command mode ------------------------------------------------------- {{{ cmap jj cnoremap cnoremap cnoremap cnoremap cnoremap if has("gui_running") " only for Macvim D is Command key cmap cmap cnoremap cnoremap cnoremap else cnoremap b cnoremap f cnoremap d endif " delet a word left of cursor cmap " }}} " Visual mode ------------------------------------------------------------- {{{ "" key mapping for visul mode vmap { vmap } "vmap y "*y vmap Y "*y " "vmap "qy "vmap "qp vnoremap Y "*y vnoremap p "*p "search for visually selectecd text vnoremap // y/" vnoremap a : " }}} " }}} " Plugins Configuration --------------------------------------------------- {{{ " Fuzzy Finder ------------------------------------------------------------ {{{ let g:fuf_modesDisable = [] let g:fuf_mrufile_maxItem = 400 let g:fuf_mrucmd_maxItem = 400 let g:fuf_file_exclude = '\v\~$|\.(DS_Store|o|exe|dll|bak|orig|swp|pyc)$|(^|[/\\])\.(hg|git|bzr|svn)($|[/\\])' let g:fuf_buffertag_ctagsPath = '/usr/local/bin/ctags' let g:fuf_enumeratingLimit = 30 nnoremap sj :FufBuffer nnoremap sk :FufFileWithCurrentBufferDir nnoremap sK :FufFileWithFullCwd nnoremap s :FufFile "nnoremap sl :FufCoverageFileChange "nnoremap sL :FufCoverageFileChange "nnoremap s :FufCoverageFileRegister nnoremap sd :FufDirWithCurrentBufferDir nnoremap sD :FufDirWithFullCwd nnoremap s :FufDir nnoremap sn :FufMruFile nnoremap sN :FufMruFileInCwd nnoremap sm :FufMruCmd "nnoremap su :FufBookmarkFile nnoremap s :FufBookmarkFileAdd "vnoremap s :FufBookmarkFileAddAsSelectedText nnoremap si :FufBookmarkDir nnoremap s :FufBookmarkDirAdd nnoremap sT :FufTag nnoremap st :FufTag! nnoremap s :FufTagWithCursorWord! nnoremap s, :FufBufferTag nnoremap s< :FufBufferTag! "vnoremap s, :FufBufferTagWithSelectedText! "vnoremap s< :FufBufferTagWithSelectedText nnoremap s} :FufBufferTagWithCursorWord! nnoremap sl :FufBufferTagAll "nnoremap s. :FufBufferTagAll nnoremap s> :FufBufferTagAll! "vnoremap s. :FufBufferTagAllWithSelectedText! "vnoremap s> :FufBufferTagAllWithSelectedText "nnoremap s] :FufBufferTagAllWithCursorWord! nnoremap sG :FufTaggedFile nnoremap sg :FufTaggedFile! "nnoremap so :FufJumpList "nnoremap sp :FufChangeList "nnoremap sq :FufQuickfix "nnoremap sy :FufLine " nnoremap sh :FufHelp "nnoremap se :FufEditDataFile nnoremap sr :FufRenewCache " }}} " YouCompleteMe ----------------------------------------------------------- {{{ "syntax on, must before the YCM, " Load YouCompleteMe only on OSX if !has("osx") let g:loaded_youcompleteme = 1 endif "let g:ycm_collect_identifiers_from_tags_files = 1 let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py' " this is fix youcompleteme python error "http://www.cnblogs.com/clivelee/p/4266559.html "https://github.com/Valloric/YouCompleteMe/issues/18 "let g:ycm_path_to_python_interpreter= '/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python' let g:ycm_auto_trigger = 1 let g:ycm_seed_identifiers_with_syntax = 1 let g:ycm_show_diagnostics_ui = 0 let g:ycm_enable_diagnostic_signs = 0 set completeopt-=preview " disable preview windows for completion let g:ycm_confirm_extra_conf = 0 " delete default mapping for d let g:ycm_key_detailed_diagnostics = '' " }}} " Airline ----------------------------------------------------------------- {{{ "if has("gui_running") let g:airline_mode_map = { \ '__' : '-', \ 'n' : 'N', \ 'i' : 'I', \ 'R' : 'R', \ 'c' : 'C', \ 'v' : 'V', \ 'V' : 'V', \ '' : 'V', \ 's' : 'S', \ 'S' : 'S', \ '' : 'S', \ } let g:airline_theme = 'badwolf' "if has("gui_running") let g:airline_powerline_fonts=1 let g:airline_left_sep = '' let g:airline_left_alt_sep = '' let g:airline_right_sep = '' let g:airline_right_alt_sep = '' " let g:airline#extensions#tabline#show_buffers = 1 let g:airline#extensions#tabline#show_buffers = 0 let g:airline#extensions#tabline#enabled = 1 let g:airline#extensions#tabline#left_sep = '' let g:airline#extensions#tabline#left_alt_sep ='' let g:airline#extensions#tagbar#enabled = 1 "else " let g:airline_powerline_fonts=1 " let g:airline_left_sep = '' "" let g:airline_left_alt_sep = '' " let g:airline_right_sep = '' "" let g:airline_right_alt_sep = '' " " let g:airline#extensions#tabline#show_buffers = 0 " let g:airline#extensions#tabline#enabled = 1 " let g:airline#extensions#tabline#left_sep = '' "" let g:airline#extensions#tabline#left_alt_sep ='' " let g:airline#extensions#tagbar#enabled = 1 "endif " " let g:airline_section_a = 'N' let g:airline_section_b = '%f%m' let g:airline_section_c = '' let g:airline_section_x = '[%-.50{CurDir()}]' let g:airline_section_y = '%y' let g:airline_section_z = '%c, %l/%L %p%%' let g:airline_section_warning = '' " (syntastic, whitespace) set laststatus=2 set statusline=\ %<%F%m%=[%-.50{CurDir()}]\ %y\ %c,\ %l/%L\ \ %p%%\ function! CurDir() let curdir = substitute(getcwd(), $HOME, "~", "g") return curdir endfunction "endif " }}} " NerdTree ---------------------------------------------------------------- {{{ " Fix keymapping conflict nmap , MarkClear nmap n :NERDTreeToggle nmap N :NERDTreeFind " }}} " AutoClose --------------------------------------------------------------- {{{ let g:AutoCloseProtectedRegions = ["Dialog", "ThoughBubble"] " }}} " TagBar ------------------------------------------------------------------ {{{ noremap f :TagbarTogglel let Tlist_Ctags_Cmd="/usr/local/bin/ctags" " }}} " Tcd --------------------------------------------------------------------- {{{ cabbrev cd Tcd " }}} " cmdline-completion ------------------------------------------------------ {{{ "http://foocoder.com/blog/mei-ri-vimcha-jian-suo-jin-xian-shi-vim-indent-guides.html/ cmap CmdlineCompletionBackward cmap CmdlineCompletionForward " }}} " VSCCommand -------------------------------------------------------------- {{{ "" ============== VCSCommand.vim ===================== "let VCSCommandSVKExec='disabled no such executable' let VCSCommandDeleteOnHide=1 let VCSCommandDisableMappings=1 "let VCSCommandEnableBufferSetup=1 "nmap sd :VCSVimDiff augroup VCSCommand autocmd User VCSBufferCreated silent! nmap q :bwipeout | setlocal nomodifiable augroup END nmap dg :diffget " }}} " YankRing ---------------------------------------------------------------- {{{ let g:yankring_min_element_length = 2 nmap \r :YRShow let g:yankring_replace_n_pkey = '>' let g:yankring_replace_n_nkey = '' let g:yankring_history_dir = "$HOME/.vim/temp/" " }}} " Gtags ------------------------------------------------------------------- {{{ if has("gui_running") noremap :Gtags noremap :Gtags -r noremap :Gtags -s noremap :Gtags -g else noremap . :Gtags noremap r :Gtags -r " noremap j :Gtags -s noremap g :Gtags -g endif " }}} " Marks ------------------------------------------------------------------- {{{ nmap \h MarkSet "nmap * MarkSearchNext "nmap # MarkSearchPrev " }}} " Gundo ------------------------------------------------------------------- {{{ " nnoremap :GundoToggle " }}} " Bookmarks --------------------------------------------------------------- {{{ let g:bookmark_save_per_working_dir = 1 let g:bookmark_auto_close = 1 let g:bookmark_auto_save = 1 " unmap the default mapping in plugins nmap DisableBookmarkToggle BookmarkToggle nmap DisableBookmarkAnnotate BookmarkAnnotate nmap DisableBookmarkShowAll BookmarkShowAll nmap DisableBookmarkNext BookmarkNext nmap DisableBookmarkPrev BookmarkPrev nmap DisableBookmarkClear BookmarkClear nmap DisableBookmarkClearAll BookmarkClearAll " remapping nmap mm BookmarkToggle " nmap ,i BookmarkAnnotate nmap \m BookmarkShowAll let g:bookmark_center = 1 let g:bookmark_auto_close = 1 "let g:bookmark_highlight_lines = 1 " nmap ,j BookmarkNext " nmap ,k BookmarkPrev " nmap ,c BookmarkClear " nmap ,x BookmarkClearAll " }}} " EasyMotion -------------------------------------------------------------- {{{ map en (easymotion-sn) map ej (easymotion-j) map ek (easymotion-k) map eb (easymotion-b) map ew (easymotion-w) map ee (easymotion-w) map el (easymotion-lineforward) map eh (easymotion-linebackward) "map n (easymotion-sn) "map j (easymotion-j) "map k (easymotion-k) "map b (easymotion-b) "map w (easymotion-w) "map e (easymotion-w) "map l (easymotion-lineforward) "map h (easymotion-linebackward) "" }}} " vim-latex --------------------------------------------------------------- {{{ "set grepprg=grep\ -nH\ $* "let g:tex_flavor='latex' "set iskeyword+=: "autocmd BufEnter *.tex set sw=2 "disable default mapping imap #$ IMAP_JumpForward nmap #$ IMAP_JumpForward vmap #$ IMAP_JumpForward vmap #$ IMAP_DeleteAndJumpForward let g:Imap_FreezeImap=1 " }}} " }}} " FileType ---------------------------------------------------------------- {{{ autocmd BufNewFile,BufRead *.log set filetype=logecc autocmd BufNewFile,BufRead *.log.[0-9] set filetype=logecc autocmd BufNewFile,BufRead *tmux.conf set filetype=tmux autocmd BufNewFile,BufRead SConstruct set filetype=python autocmd BufNewFile,BufRead SConscript* set filetype=python autocmd BufNewFile,BufReadPost *.md set filetype=markdown autocmd BufNewFile,BufRead *.c set filetype=cpp " http://vim.wikia.com/wiki/Update_the_diff_view_automatically autocmd InsertLeave,BufWritePost,CursorHold * if &diff == 1 | diffupdate | endif " setlocal nomodifiable for svn diff autocmd BufWinEnter *.svn-base setlocal nomodifiable autocmd WinEnter * nnoremap gj @=(&diff)?']czz':'gj' | \ nnoremap gk @=(&diff)?'[czz':'gk' autocmd FileType qf nnoremap q :q | setlocal nowrap | setlocal nocursorline autocmd FileType help nnoremap q :q | vertical resize 85; autocmd FileType c,cpp setlocal foldmethod=syntax | \ let b:AutoClosePairs = AutoClose#DefaultPairsModified("\"", "{}") | \ inoremap { {}kA| \ nnoremap :let word=expand(""):wincmd o:vsp:exec("tag ". word)zzzr:wincmd w autocmd FileType python setlocal foldmethod=indent | \ set list autocmd FileType xml setlocal foldmethod=syntax | \ let g:xml_syntax_folding=1 autocmd FileType vim setlocal foldmethod=marker | \ setlocal formatoptions-=c formatoptions-=r formatoptions-=o | \ let b:AutoClosePairs = AutoClose#DefaultPairsModified("", "{} \"") autocmd FileType perl setlocal foldmethod=syntax | \ let b:AutoClosePairs = AutoClose#DefaultPairsModified("\"", "{}") | \ inoremap { {}kA autocmd Filetype markdown setlocal textwidth=80 autocmd CmdwinEnter * map q :q " }}} " Functions --------------------------------------------------------------- {{{ " DiffOrig ---------------------------------------------------------------- {{{ " refert vimrc_example.vim " Convenient command to see the difference between the current buffer and the " file it was loaded from, thus the changes you made. " Only define it when not defined already. if !exists(":DiffOrig") command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis \ | wincmd p | diffthis endif " }}} " Fold Quickfix ----------------------------------------------------------- {{{ "http://vim.wikia.com/wiki/Show_only_lines_in_quickfix_list_for_current_buffer if ! exists('g:foldmisses_context') let g:foldmisses_context = 0 endif " Add manual fold from line1 to line2, inclusive. function! s:Fold(line1, line2) if a:line1 < a:line2 execute a:line1.','.a:line2.'fold' endif endfunction " Return list of line numbers for current buffer found in quickfix list. function! s:GetHitLineNumbers(list) let result = [] for d in a:list if d.valid && d.bufnr == bufnr('') call add(result, d.lnum) endif endfor return result endfunction function! s:FoldMisses(list, context) setlocal foldmethod=manual normal! zE let extra = a:context == 99999 ? g:foldmisses_context : a:context let last = 0 for lnum in s:GetHitLineNumbers(a:list) " let start = last==0 ? 1 : last+extra let start = last==0 ? 1 : last+1+extra call s:Fold(start, lnum-1-extra) let last = lnum endfor call s:Fold(last+1+extra, line('$')) " call s:Fold(last+extra, line('$')) endfunction ":[N]FoldMisses [N] Show only the lines (and surrounding [N] lines ":[N]FoldLMisses [N] of context) in the current buffer that appear " in the quickfix / location list. " Missed, error-free lines are folded away. command! -bar -count=99999 FoldMisses call s:FoldMisses(getqflist(), ) command! -bar -count=99999 FoldLMisses call s:FoldMisses(getloclist(0), ) " }}} " ToggleList -------------------------------------------------------------- {{{ "http://vim.wikia.com/wiki/Toggle_to_open_or_close_the_quickfix_window function! GetBufferList() redir =>buflist silent! ls redir END return buflist endfunction function! ToggleList(bufname, pfx) let buflist = GetBufferList() for bufnum in map(filter(split(buflist, '\n'), 'v:val =~ "'.a:bufname.'"'), 'str2nr(matchstr(v:val, "\\d\\+"))') if bufwinnr(bufnum) != -1 exec(a:pfx.'close') return endif endfor if a:pfx == 'l' && len(getloclist(0)) == 0 echohl ErrorMsg echo "Location List is Empty." return endif let winnr = winnr() exec(a:pfx.'open') if winnr() != winnr wincmd p endif endfunction nmap \l :call ToggleList("Location List", 'l') nmap \q :call ToggleList("Quickfix List", 'c') " }}} " DiffToggle -------------------------------------------------------------- {{{ "if !exists(":DiffToggle") " \ endif "endif function! DiffToggle() if(&diff) diffoff | wincmd l | :q else exec ":VCSVimDiff" | wincmd h endif endfunction nnoremap \d :call DiffToggle() "noremap d @=(&diff)?':diffoff':":VCSVimDiff" " }}} " }}} "nnoremap @=(foldlevel('.')?'za':"\") nnoremap @=(foldlevel('.')?'za':"\") "noremap d @=(&diff)?':diffoff':":VCSVimDiff" " https://bitbucket.org/sjl/dotfiles/src/tip/vim/vimrc " Make sure Vim returns to the same line when you reopen a file. " Thanks, Amit augroup line_return au! au BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ execute 'normal! g`"zvzz' | \ endif augroup END iabbrev -... =repeat('-', 80 - col(".") - 4 ) . " {{{" iabbrev "} " }}} " $ sed -n l " to show the key sequence when pressing some key, " such as Ctrl-V " cnfile " cpfile " some prefix for mapping " = ; " , " \ " m nnoremap B ^ nnoremap E $ nnoremap :cnzzzv nnoremap :cpzzzv "http://dougblack.io/words/a-good-vimrc.html "nnoremap gV `[v`] "nnoremap :let word=expand(""):vsp:wincmd w:exec("tag ". word) "nnoremap :let word=expand(""):wincmd o:vsp:exec("tag ". word)zz:wincmd w " command in normal mode, and visual mode " yiw = viwy " diw = viwd " gn select search and in visual mode " confirm when using :q to quit the last tab page, "Alias q if\ winnr('$')>1||tabpagenr('$')>1||confirm('Really\ quit?',\ "&OK\\n&Cancel")==1|quit|endif " color of current line "let s:marklist = '' nnoremap m :marks abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:normal ' "let g:ctrlp_extensions = ['tag', 'buffertag', 'quickfix', 'dir', 'rtscript', " \ 'undo', 'line', 'changes', 'mixed', 'bookmarkdir'] "" TODO: ""