" vim: set fenc=utf-8 ft=vim fdm=marker fmr={{{,}}}: " author: Thomas Ruoff " Basics {{{ set encoding=utf-8 set hidden set ttyfast set lazyredraw set updatetime=300 set synmaxcol=512 set modeline set nobackup set noswapfile set mouse=a set mousehide set wildmode=list:longest,full set wildignore+=*.swp,*.bak,*.jpg,*.gif,*.png,*.git, set splitright set splitbelow " Always show the status line set laststatus=2 set cmdheight=2 set shortmess+=c " yank delete change and put operations go by default in `"+` register " so in the systems clipboard accessable by CTRL-V on all OS types if has('mac') set clipboard^=unnamed else set clipboard^=unnamedplus endif " set ignorecase set infercase set smartcase set ignorecase set hlsearch set gdefault set number " Always show the signcolumn, otherwise it would shift the text each time " diagnostics appear/become resolved. if has("patch-8.1.1564") " Recently vim can merge signcolumn and number column into one set signcolumn=number else set signcolumn=yes endif set report=0 set showcmd set showmatch set spellcapcheck= set complete+=kspell let mapleader=" " let maplocalleader=" " " netrw let g:netrw_banner = 0 let g:netrw_liststyle = 3 let g:netrw_browse_split = 3 " sort is affecting only: directories on the top, files below let g:netrw_sort_sequence = '[\/]$,*' " }}} " Plugins {{{ call plug#begin('~/.vim/plugged') Plug 'tpope/vim-sensible' Plug 'tpope/vim-unimpaired' Plug 'tpope/vim-surround' Plug 'tpope/vim-abolish' Plug 'tpope/vim-fugitive' Plug 'tpope/vim-rhubarb' Plug 'airblade/vim-gitgutter' Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } Plug 'junegunn/fzf.vim' nnoremap b :Buffers nnoremap f :GFiles nnoremap F :Files nnoremap c :Commits nnoremap w :Windows nnoremap m :Maps nnoremap h :Helptags nnoremap / :Rg nnoremap * :Rg nnoremap C :Commands Plug 'junegunn/vim-peekaboo' Plug 'machakann/vim-highlightedyank' Plug 'editorconfig/editorconfig-vim' let g:EditorConfig_exclude_patterns = ['fugitive://.*', 'scp://.*'] Plug 'tpope/vim-projectionist' Plug 'mbbill/undotree' nnoremap u :UndotreeToggle Plug 'neoclide/coc.nvim', {'branch': 'release'} " Remap keys for gotos nmap gd (coc-definition) nmap gy (coc-type-definition) nmap gi (coc-implementation) nmap gr (coc-references) " Use `[d` and `]d` to navigate diagnostics nmap [d (coc-diagnostic-prev) nmap ]d (coc-diagnostic-next) " Remap for rename current word nmap rn (coc-rename) " Remap for do codeAction of current line nmap ac (coc-codeaction) " Applying codeAction to the selected region. " Example: `aap` for current paragraph xmap a (coc-codeaction-selected) nmap a (coc-codeaction-selected) " Fix autofix problem of current line nmap qf (coc-fix-current) " Use to trigger completion. if has('nvim') inoremap coc#refresh() else inoremap coc#refresh() endif " Make auto-select the first completion item and notify coc.nvim to " format on enter, could be remapped by other vim plugin inoremap pumvisible() ? coc#_select_confirm() \: "\u\\=coc#on_enter()\" " Use K to show documentation in preview window. nnoremap K :call show_documentation() function! s:show_documentation() if (index(['vim','help'], &filetype) >= 0) execute 'h '.expand('') elseif (coc#rpc#ready()) call CocActionAsync('doHover') else execute '!' . &keywordprg . " " . expand('') endif endfunction " Formatting selected code. xmap cf (coc-format-selected) nmap cf (coc-format-selected) Plug 'itchyny/lightline.vim' if filereadable(expand("~/.vim/lightline.vim")) source ~/.vim/lightline.vim endif function! LightlineReload() call lightline#init() call lightline#colorscheme() call lightline#update() endfunction Plug 'lifepillar/vim-gruvbox8' Plug 'SirVer/ultisnips' let g:UltiSnipsExpandTrigger="" let g:UltiSnipsJumpForwardTrigger="" let g:UltiSnipsJumpBackwardTrigger="" Plug 'pangloss/vim-javascript' Plug 'MaxMEllon/vim-jsx-pretty' Plug 'sheerun/vim-polyglot' let g:polyglot_disabled = ['javascript', 'jsx', 'latex'] Plug 'lervag/vimtex', { 'for': 'tex' } let g:vimtex_view_method = 'zathura' Plug 'wellle/targets.vim' Plug 'janko-m/vim-test' nmap t :TestNearest nmap T :TestFile let test#strategy = "vimterminal" " vim 8 plugins " if v:version >= 800 " Plug 'ludovicchabant/vim-gutentags' " let g:gutentags_cache_dir="~/.tags" " let g:gutentags_file_list_command = { " \ 'markers': { " \ '.git': 'git ls-files', " \ '.hg': 'hg files', " \ }, " \ } " endif Plug 'preservim/nerdtree' nmap n :NERDTreeToggle " debug Plug 'tweekmonster/startuptime.vim' call plug#end() " }}} " Local .vimrc {{{ set exrc set secure " }}} " Text Formatting {{{ set list if v:version > 800 set breakindent endif set showbreak=↳ set textwidth=0 set colorcolumn=+1 set nojoinspaces set tabstop=4 set softtabstop=4 set shiftwidth=4 set expandtab " }}} " Folding {{{ set foldmethod=indent set foldlevelstart=1 set nofoldenable " }}} " Diff settings {{{ set fillchars+=diff:⣿ set diffopt=vertical set diffopt+=filler set diffopt+=iwhite " }}} " {{{ Undo set undodir=~/.vim/undos,/tmp set undofile set undolevels=1000 set undoreload=10000 " }}} " Visual Setting {{{ " set cursorline set background=dark colorscheme gruvbox8 set number " }}} " GUI Settings {{{ if has("gui_running") "disable menu, toolsbar, scrollbar set guioptions -=m set guioptions -=T set guioptions -=r endif " }}} " Key mappings {{{ "" fast escaping inoremap jk "" delete buffer noremap d :bd "" indent visual selected code without unselecting and going back to normal mode vnoremap > >gv vnoremap < ss :mks! ' . g:sessions_dir . '/*.vim' exec 'nnoremap sr :so ' . g:sessions_dir. '/*.vim' "" fast editing of config nnoremap ev :e $MYVIMRC "" cheatsheet nnoremap ec :e ~/.vim/cheatsheet.md " debugging, use leader-DD to start, do a slow action, then leader-DQ to " finish. Your output will be in profile.log nnoremap DD :exe ":profile start profile.log":exe ":profile func *":exe ":profile file *" nnoremap DQ :exe ":profile pause":noautocmd qall! "" abbreviations cnoreabbrev W! w! cnoreabbrev Q! q! cnoreabbrev Qall! qall! cnoreabbrev Wq wq cnoreabbrev Wa wa cnoreabbrev wQ wq cnoreabbrev WQ wq cnoreabbrev W w cnoreabbrev Q q cnoreabbrev Qall qall iab xnow =strftime("%Y-%m-%d %H:%M") " }}} " Autocmd Rules {{{ augroup general autocmd! "" do syntax highlight syncing from start autocmd BufEnter * :syntax sync fromstart augroup END "" txt, mail, tex augroup text autocmd! autocmd FileType text,markdown,mail,tex set wrap wm=2 nocindent spell textwidth=79 augroup END augroup markdown autocmd! autocmd FileType markdown set wrap wm=2 nocindent spell textwidth=79 augroup END "" Web augroup web autocmd! autocmd FileType javascript map r :TernRename autocmd BufRead,BufNewFile *.template set filetype=html.mustache syntax=mustache autocmd BufRead,BufNewFile *.html set spell augroup END "" Help augroup HelpInTabs autocmd! autocmd BufEnter *.txt call HelpInNewTab() augroup END "Only apply to help files... function! HelpInNewTab () if &buftype == 'help' "Convert the help window to a tab... execute "normal \T" endif endfunction " Reloading vim augroup VimReload autocmd! autocmd BufWritePost $MYVIMRC source $MYVIMRC | call LightlineReload() augroup END " }}}