Files
yadm/.vimrc

494 lines
12 KiB
VimL

" vim:foldmethod=marker:foldlevel=0
" Basic configuration {{{
if &compatible
set nocompatible
set modelines=1
endif
" }}}
" Plugins {{{
filetype plugin off
filetype off " required
" set the runtime path to include Vundle and initialize
set runtimepath+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" Completion engines {{{
"Plugin 'Valloric/YouCompleteMe'
"Plugin 'zxqfl/tabnine-vim'
"Plugin 'lifepillar/vim-mucomplete'
"Plugin 'Shougo/neocomplete.vim'
"Plugin 'lyuts/vim-rtags'
"Plugin 'JBakamovic/cxxd-vim'
Plugin 'neoclide/coc.nvim'
" }}}
" Mappings {{{
"Plugin 'milkypostman/vim-togglelist' " Map of quickfix toggles
" }}}
" Code development helpers {{{
"Plugin 'rhysd/vim-clang-format'
"Plugin 'quark-zju/vim-cpp-auto-include'
Plugin 'tpope/vim-commentary' " Toggle C style comments with gc
"Plugin 'mnpk/vim-jira-complete'
"Plugin 'KabbAmine/zeavim.vim' " gz to open zeal
Plugin 'mbbill/undotree'
Plugin 'kkoomen/vim-doge'
" }}}
" Files switch, jump and grep-like tools {{{
"Plugin 'ericcurtin/CurtineIncSw.vim' "Toggle .c .h files
"Plugin 'vim-scripts/a.vim' Curtine is the new a.vim
"Plugin 'scrooloose/nerdtree'
Plugin 'mileszs/ack.vim' " Ack integration
"Plugin 'jremmen/vim-ripgrep'
Plugin 'ctrlpvim/ctrlp.vim'
"Plugin 'junegunn/fzf.vim'
Plugin 'fholgado/minibufexpl.vim'
Plugin 'justinmk/vim-sneak' " easy movement
"Plugin 'easymotion/vim-easymotion'
Plugin 'ludovicchabant/vim-gutentags' "Auto generate tags
"Plugin 'andymass/vim-matchup' " Improve if-else matches
"Plugin 'vim-scripts/taglist.vim'
Plugin 'liuchengxu/vista.vim'
Plugin 'wellle/targets.vim'
" }}}
" Git integration {{{
"Plugin 'airblade/vim-gitgutter' " Mark edited lines
Plugin 'mhinz/vim-signify' " Mark edited lines - faster gitgutter
"Plugin 'rhysd/git-messenger.vim' " show git history
"Plugin 'tpope/vim-fugitive' " Git integration
Plugin 'lambdalisue/gina.vim'
" }}}
" Syntax for random filetypes {{{
"Plugin 'gabrielelana/vim-markdown'
Plugin 'kergoth/vim-bitbake' " Bitbake templates and syntax
"Plugin 'vim-scripts/DoxygenToolkit.vim' " Doxygen support
Plugin 'pboettch/vim-cmake-syntax'
" }}}
" Colorschemes {{{
Plugin 'flazz/vim-colorschemes' " lots of colorschemes
"Plugin 'jeaye/color_coded'
"Plugin 'thiagoalessio/rainbow_levels.vim'
Plugin 'fielding/vice'
" }}}
" Other plugins (external tools, etc) {{{
"Plugin 'Shougo/vimproc.vim'
Plugin 'junegunn/goyo.vim'
Plugin 'jez/vim-superman' "vman application
Plugin 'vimwiki/vimwiki'
"Plugin 'metakirby5/codi.vim' " live coding
"Plugin 'pelodelfuego/vim-swoop' " editing in parallel
"Plugin 'vim-airline/vim-airline'
Plugin 'mhinz/vim-startify'
" }}}
call vundle#end() " required
filetype plugin indent on
" }}}
" TAB settings {{{
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
" }}}
" More Common Settings {{{
set encoding=utf-8
set scrolloff=10
set autoindent
set cino=l1,:0
set showmode
set showcmd
" do not force write on buffer switch
set hidden
"set visualbell
set nowrapscan
" }}}
" Vim draw options {{{
set cursorline
set ttyfast
set lazyredraw
set ruler
set backspace=eol,indent,start
set statusline=%<%f%h%m%r%=%b\ 0x%B\ \ %l,%c%V\ %P
set laststatus=2
set number
set norelativenumber
" Make Vim to handle long lines nicely.
set wrap
set textwidth=79
set formatoptions=cqrnb1j
syntax on
set showmatch
"set matchtime=3
"Control it with %/s///i - ignore and I - sens
"set ignorecase
set smartcase
" %s///g not needed
set gdefault
set hlsearch
set incsearch
nnoremap <leader><space> :nohlsearch<cr>
" }}}
set shell=/usr/local/bin/fish
set path+=**
" Undofile {{{
if exists("+undofile")
if isdirectory($HOME . '/.vim/undo') == 0
:silent !mkdir -p ~/.vim/undo > /dev/null 2>&1
endif
set undodir=~/.vim/undo/
set undofile
endif
" }}}
" Ctags {{{
if isdirectory($HOME . '/.vim/tags') == 0
:silent !mkdir -p ~/.vim/tags > /dev/null 2>&1
endif
let g:gutentags_cache_dir='~/.vim/tags'
"let g:gutentags_ctags_extra_args=['--fields=+l']
" }}}
"Changing Leader Key
let mapleader = "\\"
" Make pasting done without any indentation break
set pastetoggle=<F3>
nnoremap j gj
nnoremap k gk
" Get Rid of stupid Goddamned help keys
inoremap <F1> <ESC>
nnoremap <F1> <ESC>
vnoremap <F1> <ESC>
" Map : to ; also in command mode.
"nnoremap ; :
" Reselect visual block after incrementing/decrementing
vnoremap <c-a> <c-a>gv
vnoremap <c-x> <c-x>gv
" Set vim to save the file on focus out
"au FocusLost * :wa
" leader Command to remove white space from a file
""nnoremap <leader>W :%s/\s\+$//<cr>:let @/=''<CR>
" Re-hardwrap Paragraph
nnoremap <leader>q gqip
" jj For Quicker Escaping between normal and editing mode
inoremap jj <ESC>
inoremap jk <ESC>
" Resize Split When the window is resized
au VimResized * :wincmd =
" Wildmenu completion
set wildmenu
set wildmode=list:longest
set wildignore+=.hg,.git,.svn " Version Controls"
set wildignore+=*.aux,*.out,*.toc "Latex Indermediate files"
set wildignore+=*.jpg,*.bmp,*.gif,*.png,*.jpeg "Binary Imgs"
set wildignore+=*.o,*.obj,*.exe,*.dll,*.manifest "Compiled Object files"
set wildignore+=*.spl "Compiled spelling world list"
set wildignore+=*.sw? "Vim swap files"
set wildignore+=*.DS_Store "OSX SHIT"
set wildignore+=*.luac "Lua byte code"
set wildignore+=migrations "Django migrations"
set wildignore+=*.pyc "Python Object codes"
set wildignore+=*.orig "Merge resolution files"
match Error /\s\+$\|DU\cPA/
" Removing scrollbars
if !has("gui_running")
colorscheme Red
set background=dark
" To show special characters in Vim
set listchars=tab:▸\ ,trail
set list
hi clear SpellBad
hi SpellBad cterm=underline
"hi Normal ctermbg=None
endif
if &term =~ '256color'
" Disable Background Color Erase (BCE) so that color schemes
" work properly when Vim is used inside tmux and GNU screen.
" set t_ut=
endif
" Mini Buffer some settigns."
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
let g:miniBufExplStatusLineText = ''
" Tagbar key bindings."
"nmap <leader>t :TlistToggle<cr>
nnoremap <leader>2 <esc>:set tabstop=2 softtabstop=2 shiftwidth=2<cr>
nnoremap <leader>4 <esc>:set tabstop=4 softtabstop=4 shiftwidth=4<cr>
nnoremap <leader>8 <esc>:set tabstop=8 softtabstop=8 shiftwidth=8<cr>
"Full line:
"set colorcolumn=120
"call matchadd('ColorColumn', '\%80v', 100)
if has("autocmd")
"restore cursor position
autocmd BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif
autocmd FileType helpfile set nonumber
autocmd WinLeave * set nocursorline
autocmd WinEnter * set cursorline
"autocmd FileType tex set textwidth=79
"autocmd FileType c,cpp,hpp,h :RainbowLevelsOn
endif
"hi! link RainbowLevel0 Constant
"hi! link RainbowLevel1 Type
"hi! link RainbowLevel2 Function
"hi! link RainbowLevel3 String
"hi! link RainbowLevel4 PreProc
"hi! link RainbowLevel5 Statement
"hi! link RainbowLevel6 Identifier
"hi! link RainbowLevel7 Normal
"hi! link RainbowLevel8 Comment
"nnoremap yg :YcmCompleter GoTo<CR>
"nnoremap yf :YcmCompleter FixIt<CR>
"nnoremap yd :YcmCompleter GetDoc<CR>
"nnoremap yt :YcmCompleter GetType<CR>
"nnoremap yp :YcmCompleter GetParent<CR>
"let g:ycm_confirm_extra_conf = 0
"let g:ycm_warning_symbol = '>'
"let g:ycm_complete_in_strings = 0
"let g:ycm_collect_identifiers_from_tags_files = 1
"let g:ycm_enable_diagnostic_highlighting = 0
"let g:ycm_autoclose_preview_window_after_completion = 0
"let g:ycm_autoclose_preview_window_after_insertion = 1
"let g:ycm_min_num_of_chars_for_completion = 99
map <F12> :colorscheme random<CR>
" Folding {{{
function! FoldFormat()
let foldsize = (v:foldend - v:foldstart)
return getline(v:foldstart)."\t\t\t(".foldsize."\tmore lines)"
endfunction
" space one line, home,end globally increase/decrease
set foldenable
set foldlevelstart=999
set foldnestmax=5
set foldtext=FoldFormat()
set fillchars=fold:\
set foldmethod=syntax
nnoremap <space> za
nnoremap <Home> zm
nnoremap <End> zr
" }}}
nnoremap <leader>s :mksession!<CR>
set updatetime=100
" From C.vim:
" ADDITIONAL MAPPING : complete a classical C comment: '/*' => '/* | */'
"vnoremap <buffer> /* s/*<Space><Space>*/<Left><Left><Left><Esc>p
" additional mapping : complete a classical C multi-line comment:
"inoremap <buffer> /*<CR> /*<CR><CR>/<Esc>kA<Space>
" additional mapping : {<CR> always opens a block
"inoremap <buffer> {<CR> {<CR>}<Esc>O
"vnoremap <buffer> {<CR> S{<CR>}<Esc>Pk=iB
inoremap :w<CR> <Esc>:w<CR>i
"nnoremap <F2> :silent ! plantuml %:p && eog -g %:p:r.png &<CR>:redraw!<CR>
" ctrlp configuration
let g:ctrlp_map = '<c-p>'
let g:ctrlp_cmd = 'CtrlPLastMode'
let g:ctrlp_user_command = 'ack --cpp --cc --hh --hpp -f %s'
let g:ctrlp_working_path_mode = 'rw'
tnoremap <Esc> <C-W><C-W>
set nospell
set runtimepath+=/usr/share/vim/vimfiles
set spelllang=en
" Dictionary path, from which the words are being looked up.
set dictionary+=/usr/share/dict/words
" from vimconfig.com
"let g:rtagsRcCmd='rtags-rc'
"let g:matchparen_timeout = 2
"let g:matchparen_insert_timeout = 2
" Mapping to NERDTree
nnoremap <C-n> :e .<CR>
"let NERDTreeIgnore=['\.vim$', '\~$', '\.pyc$']
let g:netrw_banner=0
let g:netrw_wisize=20
let g:netrw_liststyle=3
let g:netrw_lolcalrmdir='rm -r'
nnoremap <leader>n :Lexplore<CR>
" taken from Damian Conway
"nnoremap <silent> n n:call HLNext(0.2)<cr>
"nnoremap <silent> N N:call HLNext(0.2)<cr>
"
"function! HLNext(blinktime)
" let [bufnum, lnum, col, off] = getpos('.')
" let matchlen = strlen(matchstr(strpart(getline('.'), col - 1), @/))
" let target_pat = '\c\%#'.@/
" let blinks = 1
" for n in range(1, blinks)
" let red = matchadd('WarningMsg', target_pat, 101)
" redraw
" exec 'sleep ' . float2nr(a:blinktime / (2*blinks) * 1000) . 'm'
" call matchdelete(red)
" redraw
" exec 'sleep ' . float2nr(a:blinktime / (2*blinks) * 1000) . 'm'
" endfor
"endfunction
nnoremap S :%s//g<LEFT><LEFT>
xnoremap S :s//g<LEFT><LEFT>
xmap <BS> x
function! FindAlternate()
let l:ext = 'h'
let l:curr_ext = expand('%:e')
if (l:curr_ext == 'c')
let l:ext = 'h'
elseif (l:curr_ext == 'cpp')
let l:ext = 'h'
elseif (l:curr_ext == 'h')
let l:ext = 'cpp'
elseif (l:curr_ext == 'hpp')
let l:ext = 'cpp'
endif
let l:file = expand('%:t:r') . '.' . l:ext
:exec 'find ' . l:file
endfunction
nnoremap <F6> :call FindAlternate()<CR>
"let g:alternateSearchPath="sfr:../source,sfr:../src,sfr:../include,sfr:../inc,sfr:./Source,sfr:.."
"map <F6> :call CurtineIncSw()<CR>
" taken from tpope
setglobal complete-=i
setglobal virtualedit=block
setglobal shiftround
if has('folding')
setglobal foldopen+=jump
endif
packadd termdebug
let g:startify_custom_header = ''
set shortmess+=c
inoremap <silent><expr> <c-space> coc#refresh()
set signcolumn=yes
set cmdheight=2
inoremap <silent><expr> <TAB>
\ pumvisible() ? "\<C-n>" :
\ <SID>check_back_space() ? "\<TAB>" :
\ coc#refresh()
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
function! s:check_back_space() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)
nnoremap <silent> K :call <SID>show_documentation()<CR>
function! s:show_documentation()
if (index(['vim','help'], &filetype) >= 0)
execute 'h '.expand('<cword>')
else
call CocAction('doHover')
endif
endfunction
autocmd CursorHold * silent call CocActionAsync('highlight')
xmap <leader>f <Plug>(coc-format-selected)
nmap <leader>f <Plug>(coc-format-selected)
" Show all diagnostics
nnoremap <silent> <space>a :<C-u>CocList diagnostics<cr>
" Manage extensions
nnoremap <silent> <space>e :<C-u>CocList extensions<cr>
" Show commands
nnoremap <silent> <space>c :<C-u>CocList commands<cr>
" Find symbol of current document
nnoremap <silent> <space>o :<C-u>CocList outline<cr>
" Search workspace symbols
nnoremap <silent> <space>s :<C-u>CocList -I symbols<cr>
" Do default action for next item.
nnoremap <silent> <space>j :<C-u>CocNext<CR>
" Do default action for previous item.
nnoremap <silent> <space>k :<C-u>CocPrev<CR>
" Resume latest coc list
nnoremap <silent> <space>p :<C-u>CocListResume<CR>
" Vista configuration
function! NearestMethodOrFunction() abort
return get(b:, 'vista_nearest_method_or_function', '')
endfunction
set statusline+=%{NearestMethodOrFunction()}
" By default vista.vim never run if you don't call it explicitly.
"
" If you want to show the nearest function in your statusline automatically
autocmd VimEnter * call vista#RunForNearestMethodOrFunction()