diff --git a/my_configs.vim b/my_configs.vim new file mode 100644 index 00000000..115009ca --- /dev/null +++ b/my_configs.vim @@ -0,0 +1,377 @@ +set nu +set nocompatible +let mapleader = "\" +set cmdheight=1 +set foldmethod=indent "set default foldmethod +set cursorline +highlight Cursorline cterm=bold ctermbg=16 +set scrolloff=1 +set swapfile +set shortmess=a +" set tabstop=2 +" set shiftwidth=2 +" set expandtab + +" copy and paste +vmapy mby:silent exec "!rm ~/.vbuf":tabnew ~/.vbufp:w:bdelete!:silent exec "!{ sed -z '$ s@\\n$@@' ~/.vbuf \| xsel; }" :redraw!`b +nmapy mbyiw:silent exec "!rm ~/.vbuf":tabnew ~/.vbufp:w:bdelete!:silent exec "!{ sed -z '$ s@\\n$@@' ~/.vbuf \| xsel; }":redraw!`b +nmapyy yy:silent exec "!rm ~/.vbuf":tabnew ~/.vbufpggdd:w:bdelete!:silent exec "!{ sed -z '$ s@\\n$@@' ~/.vbuf \| xsel; }":redraw! +nmapyya mbvG$y:silent exec "!rm ~/.vbuf":redraw!:tabnew ~/.vbufpgg:w:bdelete!:silent exec "!{ sed -z '$ s@\\n$@@' ~/.vbuf \| xsel; }":redraw!`b +nmapyyaa mbggvG$y:silent exec "!rm -f ~/.vbuf":redraw!:tabnew ~/.vbufpgg:w:bdelete!:silent exec "!{ sed -z '$ s@\\n$@@' ~/.vbuf \| xsel; }":redraw!`b +nmapp :r! sed -z '$ s@\\n$@@' ~/.vbuf + +" auxiliary +nmapu :diffupdate +nmapo :only +nmap/ :noh +nmapw +nmapq :q +nmapw :w +nmapwq :wq +nmapd diw +nmapd diwdiwdiwdiw +nmap 0 +nmap $ +vmap 0 +vmap $ +imap +imap 0ai +noremap k zz:call HighLightCursor(2) +noremap j zz:call HighLightCursor(2) + +" if in diff mode, set as diff shortcut, else set as other +if &diff + map 1 :diffget 1:diffupdate + map 2 :diffget 2:diffupdate + map 3 :diffget 3:diffupdate +else + map 1 1gt + map 2 2gt + map 3 3gt + map 4 4gt + map 5 5gt + map 6 6gt + map 7 7gt + map 8 8gt + map 9 9gt +endif + +set autochdir +set tags=./tags;,tags; + +function! GoToTagWithNewTab() + :set noignorecase + let tagWord = expand("") + :tabe + execute "tj ".expand(tagWord) + + let tagFilename = expand('%:t') + if tagFilename == '' + :tabclose + :tabprevious + else + :silent! normal jzok + :call HighLightCursor(2) + endif + :set ignorecase +endfunction + +function! GoToTagWithNewSplit() + :set noignorecase + let tagWord = expand("") + :vnew + execute "tj ".expand(tagWord) + + let tagFilename = expand('%:t') + if tagFilename == '' + :q + else + :silent! normal jzok + :call HighLightCursor(2) + endif + :set ignorecase +endfunction + +function! HighLightCursor(time) + let s:time_local = a:time + while 1 + :highlight Cursorline cterm=bold ctermbg=13 + redraw + sleep 100m + :highlight Cursorline cterm=bold ctermbg=16 + redraw + let s:time_local -= 1 + if s:time_local == 0 + break + endif + sleep 100m + endwhile +endfunction + +map ] :call GoToTagWithNewTab() +map \ :call GoToTagWithNewSplit() +map [ } +map t T +map n :NERDTree + +map f mtgd +map f mt +map g :noh`t :call HighLightCursor(2) +map h :call HighLightCursor(2) + +" bookmark +map a ma +map a `azz :call HighLightCursor(2) + +" run when start +autocmd VimEnter * call HighLightCursor(2) + +" set spell check +map c :set spell spelllang=en_us +autocmd BufRead,BufNewFile *.txt,*.md set spell spelllang=en_us + +" set ycm +" let g:ycm_global_ycm_extra_conf = "/Users/Hans/.vim_runtime/sources_forked/YouCompleteMe/.ycm_extra_conf.py" +" let g:ycm_add_preview_to_completeopt = 0 +" let g:ycm_show_diagnostics_ui = 0 +" let g:ycm_server_log_level = 'info' +" let g:ycm_min_num_identifier_candidate_chars = 2 +" let g:ycm_collect_identifiers_from_comments_and_strings = 1 +" let g:ycm_complete_in_strings=1 +" let g:ycm_key_invoke_completion = '' +" let g:ycm_autoclose_preview_window_after_completion = 0 +" let g:ycm_autoclose_preview_window_after_insertion = 1 +" set completeopt=menu,menuone,preview +" +" noremap +" +" let g:ycm_semantic_triggers = { +" \ 'c,cpp,cu,python,java,go,erlang,perl,py': ['re!\w{2}'], +" \ 'cs,lua,javascript': ['re!\w{2}'], +" \ } +" let g:ycm_filetype_blacklist = { +" \ 'tagbar' : 1, +" \ 'qf' : 1, +" \ 'notes' : 1, +" \ 'unite' : 1, +" \ 'vimwiki' : 1, +" \ 'pandoc' : 1, +" \ 'infolog' : 1, +" \ 'mail' : 1 +" \} + +" automatically paste without format +let &t_SI .= "\[?2004h" +let &t_EI .= "\[?2004l" + +inoremap [200~ XTermPasteBegin() + +function! XTermPasteBegin() + set pastetoggle=[201~ + set paste + return "" +endfunction + +" Commenting blocks of code. +autocmd FileType c,cpp,cu,java,scala let b:comment_leader = '// ' +autocmd FileType sh,ruby,python let b:comment_leader = '# ' +autocmd FileType conf,fstab let b:comment_leader = '# ' +autocmd FileType tex let b:comment_leader = '% ' +autocmd FileType mail let b:comment_leader = '> ' +autocmd FileType vim let b:comment_leader = '" ' +noremap . mb:silent s/^/=escape(b:comment_leader,'\/')/:nohlsearch`blll +noremap , mb:silent s/^\V=escape(b:comment_leader,'\/')//e:nohlsearch`b + +" For smooth motion +if v:version < 705 " Version less than 7.04.15 does not support + let g:comfortable_motion_no_default_key_mappings = 1 +else + let g:comfortable_motion_scroll_down_key = "j" + let g:comfortable_motion_scroll_up_key = "k" + let g:comfortable_motion_no_default_key_mappings = 1 + let g:comfortable_motion_impulse_multiplier = 1 " Feel free to increase/decrease this value. + nnoremap :call comfortable_motion#flick(g:comfortable_motion_impulse_multiplier * winheight(0) * 2) + nnoremap :call comfortable_motion#flick(g:comfortable_motion_impulse_multiplier * winheight(0) * -2) +endif + +" For move between split window +nnoremap fh h +nnoremap fj j +nnoremap fk k +nnoremap fl l + + + +" Relative line number +" set number relativenumber +" augroup numbertoggle +" autocmd! +" autocmd BufEnter,FocusGained,InsertLeave * set relativenumber +" autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber +" augroup END + +" Handle url and file +function! HandleURL() + " substitute \", \', // + let s:line = substitute(getline("."), "\\\"", " ", "g") + let s:line = substitute(s:line, "\\\'", " ", "g") + let s:line = substitute(s:line, "`", " ", "g") + let s:line = substitute(s:line, "${HOME}", "~", "g") + + let s:uri_http = matchstr(s:line, '[a-z]*:\/\/[^ >,;)]*') + let s:uri_www = matchstr(s:line, 'www[^ >,;)]*') + let s:line = substitute(s:line, "//", " ", "") + let s:uri_path = matchstr(s:line, '\(\./\|\~\|\.\./\|/\)[^ >,;)]*') + + let s:open_list = ["pdf", "jpg", "jpeg", "png", "doc", "docx"] + + if s:uri_http != "" + silent exec "!open '".s:uri_http."'" + redraw! + echo "'".s:uri_http."' opened" + elseif s:uri_www != "" + silent exec "!open https://'".s:uri_www."'" + redraw! + echo "'https://".s:uri_www."' opened" + elseif s:uri_path != "" + let s:uri_path = substitute(s:uri_path, "^\\\~", $HOME, "") + if isdirectory(s:uri_path) + silent exec "!open '".s:uri_path."'" + redraw! + echo "'".s:uri_path."' opened" + elseif filereadable(s:uri_path) + let s:suffix = fnamemodify(s:uri_path, ':e') + + if index(s:open_list, s:suffix) == -1 + :IHT + else + silent exec "!open '".s:uri_path."'" + endif + redraw! + echo "'".s:uri_path."' opened" + else + echo "'".s:uri_path."' does not exists" + endif + else + :IHT + redraw! + echo ":IHT" + endif +endfunction +map o :call HandleURL() + +function! ToggleErrors() + if empty(filter(tabpagebuflist(), 'getbufvar(v:val, "&buftype") is# "quickfix"')) + " No location/quickfix list shown, open syntastic error location panel + SyntasticCheck + Errors + echo "Syntax Check Finished" + else + lclose + SyntasticReset + echo "Syntax Check Closed" + endif +endfunction +nnoremap :call ToggleErrors() +nnoremap :lnext:call HighLightCursor(1) +nnoremap :lprevious:call HighLightCursor(1) + +" vim header +let g:header_field_author = 'Xinyue Ou' +let g:header_field_author_email = 'xinyue3ou@gmail.com' +let g:header_field_modified_by = 0 +let g:header_field_modified_timestamp = 0 +let g:header_field_license_id = 'MIT' +" No auto header +let g:header_auto_add_header = 0 +map :AddHeader + +" Nerd Tree +autocmd StdinReadPre * let s:std_in=1 +" Automatically toggle when no file specified +autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif +" Automatically toggle when opening up a directory +autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | endif +map :NERDTreeToggle +" Close vim if the only window left open is a NerdTree +autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif + +" Color Scheme +set background=dark +colorscheme gruvbox + +" NerdCommenter +" Add spaces after comment delimiters by default +let g:NERDSpaceDelims = 1 + +" Use compact syntax for prettified multi-line comments +let g:NERDCompactSexyComs = 1 + +" Align line-wise comment delimiters flush left instead of following code indentation +let g:NERDDefaultAlign = 'left' + +" Set a language to use its alternate delimiters by default +let g:NERDAltDelims_java = 1 + +" Add your own custom formats or override the defaults +let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } } + +" Allow commenting and inverting empty lines (useful when commenting a region) +let g:NERDCommentEmptyLines = 1 + +" Enable trimming of trailing whitespace when uncommenting +let g:NERDTrimTrailingWhitespace = 1 + +" Enable NERDCommenterToggle to check all selected lines is commented or not +let g:NERDToggleCheckAllLines = 1 + +" Tab Navigation +nnoremap th :tabfirst +nnoremap tk :tabnext +nnoremap tj :tabprev +nnoremap tl :tablast +nnoremap tt :tabedit +nnoremap tn :tabnew +nnoremap tm :tabm +nnoremap td :tabclose + +" Clear highlighting when press esc +nnoremap :noh +set timeout ttimeout +set timeoutlen=200 ttimeoutlen=50 + + +" Enable gentle auto pair +let g:AutoPairsUseInsertedCount = 1 + +" YCM disable preview +set completeopt-=preview + +let g:gruvbox_contrast_dark = 'hard' +set background=dark " Setting light mode + +" Terminal mapping +tnoremap h +tnoremap j +tnoremap k +tnoremap l + +nnoremap ts :terminal +nnoremap tv :vert terminal + + +" Get rid of the annoying arrow key problems +nnoremap OA +nnoremap OB +nnoremap OC +nnoremap OD +inoremap OA +inoremap OB +inoremap OC +inoremap OD + +" Change the pane size up and down +nnoremap :resize +1 +nnoremap :resize -1 +nnoremap :vertical resize +1 +nnoremap :vertical resize -1