if exists("g:loaded_plugin_config") || &cp finish endif let g:loaded_plugin_config=1 " save line continuation setting and restore it after script is loaded " This is so that line continuation is supported let s:cpo_save = &cpo set cpo&vim " NERDTree: scrooloose/nerdtree nnoremap :NERDTreeToggle " Obsession: tpope/vim-obsession " load session if present nnoremap :source Session.vim " GUNDO: sjl/gundo.vim nnoremap :GundoToggle let g:gundo_preview_bottom = 1 " ALE: w0rp/ale let g:ale_javascript_eslint_executable = 'eslint_d' let g:ale_javascript_eslint_use_global = 1 let g:gometalinter_options = [ \ ['exclude', 'error return value not checked.*(Close|Log|Print).*\(errcheck\)$'], \ ['exclude', '.*_test\.go:.*error return value not checked.*\(errcheck\)$'], \ ['exclude', 'duplicate of.*_test.go.*\(dupl\)$'], \ ['disable', 'aligncheck'], \ ['disable', 'gotype'], \ ['disable', 'gas'], \ ['cyclo-over', '20'], \ 'tests', \ ['deadline', '20s'] \ ] fun! s:BuildGoMetalinterOptionsStr() abort let l:optStrs = [] for opt in g:gometalinter_options if type(opt) == type([]) let l:optStr = '--' . opt[0] if opt[1] =~ '\s' let l:optStr = l:optStr . "='" . opt[1] . "'" else let l:optStr = l:optStr . '=' . opt[1] endif let l:optStrs = add(l:optStrs, l:optStr) elseif type(opt) == type('') let l:optStrs = add(l:optStrs, '--' . opt) endif endfor return join(l:optStrs, ' ') endf let g:ale_go_gometalinter_options = s:BuildGoMetalinterOptionsStr() let g:ale_linters = { \ 'javascript': ['eslint'], \ 'json': ['jsonlint'], \ 'pug': ['puglint'], \ 'cpp': [], \ 'go': ['gometalinter'] \ } let g:ale_sign_column_always = 1 let g:ale_sign_error = '✘✘' let g:ale_sign_warning = '' let g:ale_statusline_format = ['✘ %d', ' %d', ''] nnoremap [r :exe "normal \(ale_previous_wrap)" nnoremap ]r :exe "normal \(ale_next_wrap)" " GitGutter: airblade/vim-gitgutter let g:gitgutter_sign_added = ' +' let g:gitgutter_sign_modified = ' ~' let g:gitgutter_sign_removed = ' −' let g:gitgutter_sign_removed_first_line = ' ‾' let g:gitgutter_sign_modified_removed = ' ≃' " YCM: Valloric/YouCompleteMe let g:ycm_key_list_select_completion = ['', ''] let g:ycm_key_list_previous_completion = ['', ''] " let g:ycm_filepath_completion_use_working_dir = 1 let g:ycm_collect_identifiers_from_comments_and_strings = 1 let g:ycm_collect_identifiers_from_tags_files = 1 let g:ycm_add_preview_to_completeopt = 0 let g:ycm_confirm_extra_conf = 0 set completeopt-=preview let g:ycm_global_ycm_extra_conf = $HOME . '/.vim/.ycm_extra_conf.py' let g:ycm_filetype_blacklist = { \ 'vim': 1 \} " SuperTab: ervandew/supertab let g:SuperTabDefaultCompletionType = '' " UltiSnips: SirVer/ultisnips let g:UltiSnipsEditSplit='vertical' let g:UltiSnipsSnippetsDir=$HOME . '/.vim/UltiSnips' let g:UltiSnipsSnippetDirectories=['UltiSnips'] let g:UltiSnipsExpandTrigger='' let g:UltiSnipsJumpForwardTrigger='' let g:UltiSnipsJumpBackwardTrigger='' let g:UltiSnipsListSnippets='' " VimQf: romainl/vim-qf nnoremap :exe "normal \QfSwitch" let g:qf_mapping_ack_style = 1 " FZFVIM: junegunn/fzf.vim nnoremap :FZF nnoremap :Buffers " case sensitive rg command nnoremap q :RGS let g:rg_command = $RG_COMMAND_BASE . ' --column --line-number --no-heading --color "always"' fun! BuildRgCommand(opts, qargs) let l:list = [g:rg_command] + a:opts + ['--', shellescape(a:qargs)] return join(l:list, ' ') endfun " Search recursive ignoring case command! -bang -nargs=* RG call fzf#vim#grep(BuildRgCommand(['--ignore-case', '--fixed-strings'], ), 1, 0) " Search recursive case sensitive command! -bang -nargs=* RGS call fzf#vim#grep(BuildRgCommand(['--fixed-strings'], ), 1, 0) " Search recursive case sensitive as RegExp command! -bang -nargs=* RGX call fzf#vim#grep(BuildRgCommand([], ), 1, 0) " Seach recursive case sensitive with word boundaries command! -bang -nargs=* RGSW call fzf#vim#grep(BuildRgCommand(['-w', '--fixed-strings'], ), 1, 0) " Search files for word under cursor nnoremap s "zyiw :let cmd = 'RGSW ' . @z call histadd("cmd", cmd) execute cmd " Search files for visually selected text xnoremap s "zy :let cmd = 'RGS ' . @z call histadd("cmd", cmd) execute cmd " Populate quickfix window with selected fzf pane contents function! s:build_quickfix_list(lines) call setqflist(map(copy(a:lines), '{ "filename": v:val }')) copen cc endfunction let g:fzf_action = { \ 'ctrl-q': function('s:build_quickfix_list'), \ 'ctrl-t': 'tab split', \ 'ctrl-x': 'split', \ 'ctrl-v': 'vsplit' } " TagBar: majutsushi/tagbar nnoremap :TagbarToggle let g:tagbar_width = 50 " Tag Highlight: vim-scripts/TagHighlight " let g:TagHighlightSettings = { } " let g:TagHighlightSettings['ExtensionLanguageOverrides'] = {'inl': 'c'} " Vim Easy Align: junegunn/vim-easy-align xnoremap :EasyAlign if !exists('g:easy_align_delimiters') let g:easy_align_delimiters = {} endif " Custom alignment delimeters for c style langs let g:easy_align_delimiters['d'] = { \ 'pattern': ' \(\S\+\s*[;=]\)\@=', \ 'left_margin': 0, 'right_margin': 0 \ } " Easy Motion: Lokaltog/vim-easymotion hi link EasyMotionTarget2First Constant hi link EasyMotionTarget2Second Constant " Vim Flow: flowtype/vim-flow " disabling system wide. Enable with dir level .vimrc if needed let g:flow#enable = 0 let g:flow#omnifunc = 0 " Vim JavaScript: pangloss/vim-javascript let g:javascript_plugin_jsdoc = 1 " Vim JsDoc: heavenshell/vim-jsdoc nmap :exe "normal \(jsdoc)" let g:jsdoc_allow_input_prompt = 1 let g:jsdoc_input_description = 1 let g:jsdoc_enable_es6 = 1 " Vim Go: fatih/vim-go " prevent automatic installation of all vim-go dependencies let g:go_disable_autoinstall = 0 " format with goimports instead of gofmt let g:go_fmt_command = "goimports" " go syntax highlighting let g:go_highlight_functions = 1 let g:go_highlight_methods = 1 let g:go_highlight_structs = 1 let g:go_highlight_operators = 1 let g:go_highlight_build_constraints = 1 let g:go_highlight_types = 1 let g:go_highlight_extra_types = 1 let g:go_highlight_fields = 1 " camel case for JSON tags let g:go_addtags_transform = "camelcase" let g:go_fold_enable = ['import', 'package_comment'] let g:tagbar_type_go = { \ 'ctagstype' : 'go', \ 'kinds' : [ \ 'p:package', \ 'i:imports:1', \ 'c:constants', \ 'v:variables', \ 't:types', \ 'n:interfaces', \ 'w:fields', \ 'e:embedded', \ 'm:methods', \ 'r:constructor', \ 'f:functions' \ ], \ 'sro' : '.', \ 'kind2scope' : { \ 't' : 'ctype', \ 'n' : 'ntype' \ }, \ 'scope2kind' : { \ 'ctype' : 't', \ 'ntype' : 'n' \ }, \ 'ctagsbin' : 'gotags', \ 'ctagsargs' : '-sort -silent' \ } " restore previous line continuation settings let &cpo = s:cpo_save " NERDCommenter: scrooloose/nerdcommenter let g:NERDSpaceDelims = 1 " handle vue component file commenting let g:NERD_ft = '' function! NERDCommenter_before() if &ft == 'vue' let g:NERD_ft = 'vue' let stack = synstack(line('.'), col('.')) if len(stack) > 0 let syn = synIDattr((stack)[0], 'name') if len(syn) > 0 exe 'setf ' . substitute(tolower(syn), '^vue_', '', '') endif endif endif endfunction function! NERDCommenter_after() if g:NERD_ft == 'vue' setf vue let g:NERD_ft = '' endif endfunction