" Run the following git commands to get the plugins " Plugin manager if empty(glob('~/.vim/autoload/plug.vim')) silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim autocmd VimEnter * PlugInstall --sync | source $MYVIMRC endif " Pre-plugin calls let g:ale_completion_enabled = 1 let g:ale_hover_to_floating_preview = 1 let g:ale_floating_preview = 1 " Plugins call plug#begin('~/.vim/plugged') Plug 'preservim/nerdtree' Plug 'tpope/vim-fugitive' Plug 'tpope/vim-commentary' Plug 'itchyny/lightline.vim' Plug 'dikiaap/minimalist' Plug 'morhetz/gruvbox' Plug 'dense-analysis/ale' Plug 'maximbaz/lightline-ale' Plug 'preservim/tagbar' Plug 'vim-php/tagbar-phpctags.vim' Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'junegunn/fzf.vim' Plug 'arcticicestudio/nord-vim' Plug 'airblade/vim-gitgutter' call plug#end() filetype plugin indent on syntax on set autoindent set backspace=2 set background=dark set completeopt=menu,popup set cursorcolumn set cursorline set expandtab set history=1000 set hlsearch set incsearch set nowrap set number set numberwidth=4 set pastetoggle= "Press when paste-alot set preserveindent set ruler set shiftround set shiftwidth=2 set shortmess=atI set showcmd set showmatch set smartindent set smarttab set splitright set tabstop=2 set whichwrap+=<,>,[,],h,l set undofile set undodir=~/.vim/undo " Gruvbox let g:gruvbox_italic = 1 let g:gruvbox_bold = 1 let g:gruvbox_transaprent_bg = 1 colorscheme gruvbox " ALE completion let g:ale_completion_autoimport = 1 set omnifunc=ale#completion#OmniFunc " Ale keymaps nnoremap g :ALEGoToDefinition -tab nnoremap G :ALEGoToDefinition nnoremap h :ALEHover nnoremap f :ALEFindReferences " ALE navigation nmap (ale_previous_wrap) nmap (ale_next_wrap) " Lightline set laststatus=2 set noshowmode let g:lightline = { \ 'colorscheme': 'gruvbox', \ 'active': { \ 'left': [ \ [ 'mode', 'paste' ], \ [ 'gitbranch', 'readonly', 'filename', 'tagbar', 'modified' ] \ ], \ 'right': [ \ [ 'linter_checking', 'linter_errors', 'linter_warnings', 'linter_infos', 'linter_ok' ], \ [ 'percent', 'lineinfo', 'offset' ], \ [ 'fileformat', 'fileencoding', 'filetype' ] \ ] \ }, \ 'component': { \ 'tagbar': '%{tagbar#currenttag("%s", "", "f", "nearest-stl")}', \ }, \ 'component_function': { \ 'gitbranch': 'FugitiveHead', \ 'offset': 'FileOffset' \ }, \ 'component_expand': { \ 'linter_checking': 'lightline#ale#checking', \ 'linter_infos': 'lightline#ale#infos', \ 'linter_warnings': 'lightline#ale#warnings', \ 'linter_errors': 'lightline#ale#errors', \ 'linter_ok': 'lightline#ale#ok' \ }, \ 'component_type': { \ 'linter_checking': 'right', \ 'linter_infos': 'right', \ 'linter_warnings': 'warning', \ 'linter_errors': 'error', \ 'linter_ok': 'right' \ } \ } function! FileOffset() return line2byte(line('.')) + col('.') - 1 endfunction " NERDtree " Start NERDTree if no file was specified autocmd StdinReadPre * let s:std_in=1 " autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | call NERDTreeToggleCustom() | endif " Close NERDTree on opening file let NERDTreeQuitOnOpen=1 " Show hidden files let NERDTreeShowHidden=1 function! NERDTreeToggleCustom() " If NERDTree is open in the current buffer if (exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1) exe ":NERDTreeClose" elseif bufname('%') != "" exe ":NERDTreeFind" else exe ":NERDTreeCWD" endif endfunction " Toggle NERDTree on -o map o :call NERDTreeToggleCustom() " Tagbar let g:tagbar_autoclose = 1 let g:tagbar_autofocus = 1 let g:tagbar_map_showproto = '' " Toggle transparent background let g:is_transparent = 0 function! Toggle_transparent() echo g:is_transparent if g:is_transparent == 0 hi Normal guibg=NONE ctermbg=NONE let g:is_transparent = 1 else set background=dark let g:is_transparent = 0 endif endfunction nnoremap T :call Toggle_transparent() " Location list autocmd BufEnter * if !exists("b:location_list") | let b:location_list = 0 | endif let b:location_list = 0 function! Toggle_location_list() if b:location_list == 0 lopen let b:location_list = 1 else lclose let b:location_list = 0 endif endfunction nnoremap l :call Toggle_location_list() " Location list autocmd BufEnter * if !exists("b:quick_list") | let b:quick_list = 0 | endif let b:quick_list = 0 function! Toggle_quick_list() if b:quick_list == 0 copen let b:quick_list = 1 else cclose let b:quick_list = 0 endif endfunction nnoremap c :call Toggle_quick_list() " Git blame autocmd BufEnter * if !exists("b:git_blame") | let b:git_blame = 0 | endif function! Toggle_git_blame() if b:git_blame == 0 :Git blame let b:git_blame = 1 else let winIndex = 1 let winCnt = winnr('$') while winIndex <= winCnt if expand('%:e') == "fugitiveblame" :close else :wincmd w endif let winIndex += 1 endwhile let b:git_blame = 0 endif endfunction nnoremap b :call Toggle_git_blame() " Key mappings map n :cnext map p :cprevious nnoremap c :cclose nmap t :TagbarToggle nmap f :Files nmap r :Rg nmap n :GitGutterNextHunk nmap p :GitGutterPrevHunk " Setting title to enable better tmux titling if exists('$TMUX') autocmd BufReadPost,FileReadPost,BufNewFile,BufEnter * call system("tmux rename-window 'vim | " . expand("%:t") . "'") autocmd VimLeave * call system("tmux setw automatic-rename") endif function! PrettyXML() set filetype=xml silent %!xmllint --format --encode UTF-8 --recover - 2>/dev/null endfunction function! PrettyJSON() set filetype=json silent %!python3 -m json.tool endfunction command! PrettyXml call PrettyXML() command! PrettyJson call PrettyJSON() nmap j call PrettyXml() nmap x call PrettyJSON()