changeset 426:67f14a8c2304

Improve Vim configuration.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 28 Mar 2018 20:07:30 -0700
parents 350f7a55ff33
children 9a046e8fe5dd
files vim/autoload/ludo.vim vim/vimrc
diffstat 2 files changed, 99 insertions(+), 53 deletions(-) [+]
line wrap: on
line diff
--- a/vim/autoload/ludo.vim	Wed Mar 28 20:07:21 2018 -0700
+++ b/vim/autoload/ludo.vim	Wed Mar 28 20:07:30 2018 -0700
@@ -1,16 +1,41 @@
+let g:ludo_trace = 0
+
+" Debug logging.
+function! ludo#trace(msg) abort
+    if g:ludo_trace
+        echom a:msg
+    endif
+endfunction
+
+" Warning message.
+function! ludo#warn(msg) abort
+    echohl WarningMsg
+    echomsg "ludo: Warning: ".a:msg
+    echohl None
+endfunction
+
+" Error message.
+function! ludo#error(msg) abort
+    echohl ErrorMsg
+    echomsg "ludo: Error: ".a:msg
+    echohl None
+endfunction
+
 
 " Loads `pathogenrc` files in each bundle directory and, if found,
 " builds an exclude list based on the glob patterns found in them.
 "
 function! ludo#setup_pathogen(bundle_dirs) abort
     for bundle_dir in a:bundle_dirs
-        let l:rcfile = bundle_dir.'/pathogenrc'
+        let l:rcfile = bundle_dir.'.pathogenrc'
         if !filereadable(l:rcfile)
+            call ludo#trace("No bundle configuration file: ".l:rcfile)
             continue
         endif
 
         let l:included = []
         let l:excluded = []
+        call ludo#trace("Reading bundle configuration file: ".l:rcfile)
         let l:rclines = readfile(l:rcfile)
         for line in l:rclines
             if line[0] == '#'
@@ -45,5 +70,6 @@
             endif
         endfor
     endfor
+    call ludo#trace("Exclude list: ".join(g:pathogen_disabled, ', '))
 endfunction
 
--- a/vim/vimrc	Wed Mar 28 20:07:21 2018 -0700
+++ b/vim/vimrc	Wed Mar 28 20:07:30 2018 -0700
@@ -23,6 +23,9 @@
 if has("win32") || has("win64") || has("dos32")
     let s:vim_platform = "windows"
     let s:path_sep = "\\"
+elseif has("mac")
+    let s:vim_platform = "mac"
+    let s:path_sep = '/'
 else
     let s:vim_platform = "unix"
     let s:path_sep = '/'
@@ -67,7 +70,7 @@
 endif
 
 function! s:HasPlugin(plugname) abort
-  return globpath(&runtimepath, 'plugin/'.a:plugname.'.vim') !=# ''
+    return globpath(&runtimepath, 'plugin/'.a:plugname.'.vim') !=# ''
 endfunction
 
 " }}}
@@ -255,8 +258,8 @@
 
 " Ctrl-P should however ignore some stuff.
 let g:ctrlp_custom_ignore = {
-  \ 'dir':  '\v[\/](\.git|\.hg|\.svn|venv|static|node_modules|_cache|_counter)$'
-  \ }
+            \ 'dir': '\v[\/](\.git|\.hg|\.svn|venv|static|node_modules|_cache|_counter)$'
+            \ }
 
 " Make Ctrl-P cache stuff in our temp directory.
 let g:ctrlp_cache_dir = s:vim_home.'/cache'
@@ -274,17 +277,28 @@
             \]
 
 " Use PyMatch to go faster.
-if has('python3') || has('python')
-  let g:ctrlp_match_func = {'match': 'pymatcher#PyMatch'}
-  let g:ctrlp_max_files = 0
-  let g:ctrlp_lazy_update = 350
+if (has('python3') || has('python')) && s:HasPlugin('ctrlp-py-matcher')
+    let g:ctrlp_match_func = {'match': 'pymatcher#PyMatch'}
+    let g:ctrlp_max_files = 0
+    let g:ctrlp_lazy_update = 350
 endif
 
 " }}}
 
 " FZF {{{
 
+if s:vim_platform == 'mac'
+    if filereadable('/usr/local/opt/fzf/plugin/fzf.vim')
+        " FZF installed via Homebrew.
+        source /usr/local/opt/fzf/plugin/fzf.vim
+    endif
+endif
 
+let g:fzf_action = {
+      \'ctrl-t': 'tab split',
+      \'ctrl-v': 'vsplit',
+      \'ctrl-x': 'split',
+      \}
 
 " }}}
 
@@ -641,30 +655,30 @@
 
 " YCM mappings.
 if s:HasPlugin('youcompleteme')
-  augroup VimRC_YouCompleteMe
-    autocmd!
-    autocmd FileType cpp nnoremap <Leader>jj :YcmCompleter GoToImprecise<cr>zv
-    autocmd FileType cpp nnoremap <Leader>jd :YcmCompleter GoToDefinition<cr>zv
-    autocmd FileType cpp nnoremap <Leader>jh :YcmCompleter GoToDeclaration<cr>zv
-    autocmd FileType cpp nnoremap <Leader>ji :YcmCompleter GoToInclude<cr>
-    autocmd FileType cpp nnoremap <Leader>jc :YcmCompleter GetDoc<cr>
-    autocmd FileType cpp nnoremap <Leader>je :YcmShowDetailedDiagnostic<cr>
-  augroup END
+    augroup VimRC_YouCompleteMe
+        autocmd!
+        autocmd FileType cpp nnoremap <Leader>jj :YcmCompleter GoToImprecise<cr>zv
+        autocmd FileType cpp nnoremap <Leader>jd :YcmCompleter GoToDefinition<cr>zv
+        autocmd FileType cpp nnoremap <Leader>jh :YcmCompleter GoToDeclaration<cr>zv
+        autocmd FileType cpp nnoremap <Leader>ji :YcmCompleter GoToInclude<cr>
+        autocmd FileType cpp nnoremap <Leader>jc :YcmCompleter GetDoc<cr>
+        autocmd FileType cpp nnoremap <Leader>je :YcmShowDetailedDiagnostic<cr>
+    augroup END
 endif
 
 " OmniSharp mappings
 if s:HasPlugin('OmniSharp')
-  augroup VimRC_OmniSharp
-    autocmd!
-    autocmd FileType cs setlocal omnifunc=OmniSharp#Complete
-    autocmd BufEnter,TextChanged,InsertLeave *.cs SyntasticCheck
-    autocmd CursorHold *.cs call OmniSharp#TypeLookupWithoutDocumentation()
-    autocmd FileType cs nnoremap <Leader>jj :OmniSharpGotoDefinition<cr>
-    autocmd FileType cs nnoremap <Leader>x  :OmniSharpFixIssue<cr>
-    autocmd FileType cs nnoremap <Leader>fx :OmniSharpFixUsings<cr>
-    autocmd FileType cs nnoremap <Leader>tt :OmniSharpTypeLookup<cr>
-    autocmd FileType cs nnoremap <Leader>dc :OmniSharpDocumentation<cr>
-  augroup END
+    augroup VimRC_OmniSharp
+        autocmd!
+        autocmd FileType cs setlocal omnifunc=OmniSharp#Complete
+        autocmd BufEnter,TextChanged,InsertLeave *.cs SyntasticCheck
+        autocmd CursorHold *.cs call OmniSharp#TypeLookupWithoutDocumentation()
+        autocmd FileType cs nnoremap <Leader>jj :OmniSharpGotoDefinition<cr>
+        autocmd FileType cs nnoremap <Leader>x  :OmniSharpFixIssue<cr>
+        autocmd FileType cs nnoremap <Leader>fx :OmniSharpFixUsings<cr>
+        autocmd FileType cs nnoremap <Leader>tt :OmniSharpTypeLookup<cr>
+        autocmd FileType cs nnoremap <Leader>dc :OmniSharpDocumentation<cr>
+    augroup END
 endif
 
 " ProjectRoot mappings
@@ -672,37 +686,43 @@
       \'help', 'nofile', 'quickfix']
 
 function! s:AutoProjectRootCD() abort
-  try
-    if index(s:no_auto_projectroot_buftypes, &buftype) == -1
-      ProjectRootCD
-    endif
-  catch
-    " Silently ignore invalid buffers
-  endtry
+    try
+        if index(s:no_auto_projectroot_buftypes, &buftype) == -1
+            ProjectRootCD
+        endif
+    catch
+        " Silently ignore invalid buffers
+    endtry
 endfunction
 
 augroup VimRC_ProjectRoot
-  autocmd!
-  autocmd BufEnter * call <SID>AutoProjectRootCD()
+    autocmd!
+    autocmd BufEnter * call <SID>AutoProjectRootCD()
 augroup END
 
 nnoremap <leader>cd :ProjectRootCD<cr>
 
 " Ctrl-P mappings.
 if s:HasPlugin('ctrlp')
-  nnoremap <silent> <C-p> :CtrlP<cr>
-  nnoremap <silent> <C-o> :CtrlPBuffer<cr>
-  nnoremap <silent> <C-u> :CtrlPTag<cr>
-  nnoremap <silent> <C-y> :CtrlPBufTag<cr>
-  nnoremap <silent> <Tab> :CtrlPMRUFiles<cr>
-  nnoremap <silent> <F8> :CtrlPBookmarkDir<cr>
+    nnoremap <silent> <C-p> :CtrlP<cr>
+    nnoremap <silent> <C-o> :CtrlPBuffer<cr>
+    nnoremap <silent> <C-u> :CtrlPTag<cr>
+    nnoremap <silent> <C-y> :CtrlPBufTag<cr>
+    nnoremap <silent> <Tab> :CtrlPMRUFiles<cr>
+    nnoremap <silent> <F8> :CtrlPBookmarkDir<cr>
 endif
 
 " FZF mappings.
 if s:HasPlugin('fzf')
-  nnoremap <silent> <C-p> :Files<cr>
-  nnoremap <silent> <C-o> :Buffers<cr>
-  nnoremap <Tab> :History<cr>
+    if exists('*fzf#run')
+        nnoremap <silent> <C-p> :Files<cr>
+        nnoremap <silent> <C-o> :Buffers<cr>
+        nnoremap <Tab> :History<cr>
+    else
+        call ludo#error(
+                    \"FZF is installed and enabled, but the Vim plugin ".
+                    \"isn't loaded... add it to your `vimrc-local-pre`.")
+    endif
 endif
 
 " }}}
@@ -772,13 +792,13 @@
 endfunction
 
 function! s:ToggleCppFolding() abort
-  if (&foldmethod == "syntax")
-    setlocal foldmethod=manual
-    setlocal nofoldenable
-  else
-    setlocal foldmethod=syntax
-    setlocal foldenable
-  endif
+    if (&foldmethod == "syntax")
+        setlocal foldmethod=manual
+        setlocal nofoldenable
+    else
+        setlocal foldmethod=syntax
+        setlocal foldenable
+    endif
 endfunction
 
 " }}}