""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Important: " This requires that you install https://github.com/amix/vimrc ! " """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""" " => Load pathogen paths """""""""""""""""""""""""""""" " let s:vim_runtime = expand(':p:h')."/.." " call pathogen#infect(s:vim_runtime.'/sources_forked/{}') " call pathogen#infect(s:vim_runtime.'/sources_non_forked/{}') " call pathogen#infect(s:vim_runtime.'/my_plugins/{}') " call pathogen#helptags() """""""""""""""""""""""""""""" " => Load plug """""""""""""""""""""""""""""" call plug#begin() Plug 'jlanzarotta/bufexplorer' Plug 'ctrlpvim/ctrlp.vim' Plug 'scrooloose/nerdtree' Plug 'neoclide/coc.nvim' Plug 'vim-scripts/peaksea' call plug#end() """""""""""""""""""""""""""""" " => bufExplorer plugin """""""""""""""""""""""""""""" let g:bufExplorerDefaultHelp=0 let g:bufExplorerShowRelativePath=1 let g:bufExplorerFindActive=1 let g:bufExplorerSortBy='name' map o :BufExplorer """""""""""""""""""""""""""""" " => MRU plugin """""""""""""""""""""""""""""" " let MRU_Max_Entries = 400 " map f :MRU """""""""""""""""""""""""""""" " => YankStack """""""""""""""""""""""""""""" " let g:yankstack_yank_keys = ['y', 'd'] " nmap yankstack_substitute_older_paste " nmap yankstack_substitute_newer_paste """""""""""""""""""""""""""""" " => CTRL-P """""""""""""""""""""""""""""" let g:ctrlp_working_path_mode = 0 " Quickly find and open a file in the current working directory let g:ctrlp_map = '' map j :CtrlP " Quickly find and open a buffer map b :CtrlPBuffer let g:ctrlp_max_height = 20 let g:ctrlp_custom_ignore = 'node_modules\|^\.DS_Store\|^\.git\|^\.coffee' """""""""""""""""""""""""""""" " => ZenCoding """""""""""""""""""""""""""""" " Enable all functions in all modes " let g:user_zen_mode='a' """""""""""""""""""""""""""""" " => snipMate (beside support ) """""""""""""""""""""""""""""" " ino =snipMate#TriggerSnippet() " snor i=snipMate#TriggerSnippet() " let g:snipMate = { 'snippet_version' : 1 } """""""""""""""""""""""""""""" " => Vim grep """""""""""""""""""""""""""""" " let Grep_Skip_Dirs = 'RCS CVS SCCS .svn generated' " set grepprg=/bin/grep\ -nH """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Nerd Tree """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:NERDTreeWinPos = "right" let NERDTreeShowHidden=0 let NERDTreeIgnore = ['\.pyc$', '__pycache__'] let g:NERDTreeWinSize=35 map nn :NERDTreeToggle map nb :NERDTreeFromBookmark map nf :NERDTreeFind """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => vim-multiple-cursors """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:multi_cursor_use_default_mapping=0 " Default mapping " let g:multi_cursor_start_word_key = '' " let g:multi_cursor_select_all_word_key = '' " let g:multi_cursor_start_key = 'g' " let g:multi_cursor_select_all_key = 'g' " let g:multi_cursor_next_key = '' " let g:multi_cursor_prev_key = '' " let g:multi_cursor_skip_key = '' " let g:multi_cursor_quit_key = '' """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => surround.vim config " Annotate strings with gettext """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " vmap Si S(i_f) " au FileType mako vmap Si S"i${ _(2f"a) } """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => lightline """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:lightline = { \ 'colorscheme': 'wombat', \ 'active': { \ 'left': [ ['mode', 'paste'], \ ['fugitive', 'readonly', 'filename', 'modified'] ], \ 'right': [ [ 'lineinfo' ], ['percent'] ] \ }, \ 'component': { \ 'readonly': '%{&filetype=="help"?"":&readonly?"🔒":""}', \ 'modified': '%{&filetype=="help"?"":&modified?"+":&modifiable?"":"-"}', \ 'fugitive': '%{exists("*FugitiveHead")?FugitiveHead():""}' \ }, \ 'component_visible_condition': { \ 'readonly': '(&filetype!="help"&& &readonly)', \ 'modified': '(&filetype!="help"&&(&modified||!&modifiable))', \ 'fugitive': '(exists("*FugitiveHead") && ""!=FugitiveHead())' \ }, \ 'separator': { 'left': ' ', 'right': ' ' }, \ 'subseparator': { 'left': ' ', 'right': ' ' } \ } """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Vimroom """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " let g:goyo_width=100 " let g:goyo_margin_top = 2 " let g:goyo_margin_bottom = 2 " nnoremap z :Goyo """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Ale (syntax checker and linter) """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:ale_linters = { \ 'javascript': ['eslint'], \ 'python': ['flake8'], \ 'go': ['go', 'golint', 'errcheck'] \} nmap a (ale_next_wrap) " Disabling highlighting let g:ale_set_highlights = 0 " Only run linting when saving the file let g:ale_lint_on_text_changed = 'never' let g:ale_lint_on_enter = 0 let g:ale_virtualtext_cursor = 'disabled' """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Git gutter (Git diff) """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " let g:gitgutter_enabled=0 " nnoremap d :GitGutterToggle """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => EditorConfig (project-specific EditorConfig rule) """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " let g:EditorConfig_exclude_patterns = ['fugitive://.*'] """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Fugitive """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Copy the link to the line of a Git repository to the clipboard " nnoremap v :.GBrowse! " xnoremap v :GBrowse! """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => coc """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " May need for Vim (not Neovim) since coc.nvim calculates byte offset by count " utf-8 byte sequence set encoding=utf-8 " Some servers have issues with backup files, see #649 set nobackup set nowritebackup " Having longer updatetime (default is 4000 ms = 4s) leads to noticeable " delays and poor user experience set updatetime=300 " Always show the signcolumn, otherwise it would shift the text each time " diagnostics appear/become resolved set signcolumn=yes " Use tab for trigger completion with characters ahead and navigate " NOTE: There's always complete item selected by default, you may want to enable " no select by `"suggest.noselect": true` in your configuration file " NOTE: Use command ':verbose imap ' to make sure tab is not mapped by " other plugin before putting this into your config inoremap \ coc#pum#visible() ? coc#pum#next(1) : \ CheckBackspace() ? "\" : \ coc#refresh() inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" " Make to accept selected completion item or notify coc.nvim to format " u breaks current undo, please make your own choice inoremap coc#pum#visible() ? coc#pum#confirm() \: "\u\\=coc#on_enter()\" function! CheckBackspace() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction " Use to trigger completion if has('nvim') inoremap coc#refresh() else inoremap coc#refresh() endif " Use `[g` and `]g` to navigate diagnostics " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list nmap [g (coc-diagnostic-prev) nmap ]g (coc-diagnostic-next) " GoTo code navigation nmap gd (coc-definition) nmap gy (coc-type-definition) nmap gi (coc-implementation) nmap gr (coc-references) " Use K to show documentation in preview window nnoremap K :call ShowDocumentation() function! ShowDocumentation() if CocAction('hasProvider', 'hover') call CocActionAsync('doHover') else call feedkeys('K', 'in') endif endfunction " Highlight the symbol and its references when holding the cursor autocmd CursorHold * silent call CocActionAsync('highlight') " Symbol renaming nmap rn (coc-rename) " Formatting selected code xmap f (coc-format-selected) nmap f (coc-format-selected) augroup mygroup autocmd! " Setup formatexpr specified filetype(s) autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') " Update signature help on jump placeholder autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') augroup end " Applying code actions to the selected code block " Example: `aap` for current paragraph xmap a (coc-codeaction-selected) nmap a (coc-codeaction-selected) " Remap keys for applying code actions at the cursor position nmap ac (coc-codeaction-cursor) " Remap keys for apply code actions affect whole buffer nmap as (coc-codeaction-source) " Apply the most preferred quickfix action to fix diagnostic on the current line nmap qf (coc-fix-current) " Remap keys for applying refactor code actions nmap re (coc-codeaction-refactor) xmap r (coc-codeaction-refactor-selected) nmap r (coc-codeaction-refactor-selected) " Run the Code Lens action on the current line nmap cl (coc-codelens-action) " Map function and class text objects " NOTE: Requires 'textDocument.documentSymbol' support from the language server xmap if (coc-funcobj-i) omap if (coc-funcobj-i) xmap af (coc-funcobj-a) omap af (coc-funcobj-a) xmap ic (coc-classobj-i) omap ic (coc-classobj-i) xmap ac (coc-classobj-a) omap ac (coc-classobj-a) " Remap and to scroll float windows/popups if has('nvim-0.4.0') || has('patch-8.2.0750') nnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" nnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" inoremap coc#float#has_scroll() ? "\=coc#float#scroll(1)\" : "\" inoremap coc#float#has_scroll() ? "\=coc#float#scroll(0)\" : "\" vnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" vnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" endif " Use CTRL-S for selections ranges " Requires 'textDocument/selectionRange' support of language server nmap (coc-range-select) xmap (coc-range-select) " Add `:Format` command to format current buffer command! -nargs=0 Format :call CocActionAsync('format') " Add `:Fold` command to fold current buffer command! -nargs=? Fold :call CocAction('fold', ) " Add `:OR` command for organize imports of the current buffer command! -nargs=0 OR :call CocActionAsync('runCommand', 'editor.action.organizeImport') " Add (Neo)Vim's native statusline support " NOTE: Please see `:h coc-status` for integrations with external plugins that " provide custom statusline: lightline.vim, vim-airline set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} " Mappings for CoCList " Show all diagnostics nnoremap a :CocList diagnostics " Manage extensions nnoremap e :CocList extensions " Show commands nnoremap c :CocList commands " Find symbol of current document nnoremap o :CocList outline " Search workspace symbols nnoremap s :CocList -I symbols " Do default action for next item nnoremap j :CocNext " Do default action for previous item nnoremap k :CocPrev " Resume latest coc list nnoremap p :CocListResume