diff vim/vimrc @ 183:8b37877d309f

Merged changes.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 20 Jul 2014 19:36:55 -0700
parents 94bf0bd0a788 c6a072353606
children 0ed6642b8db8
line wrap: on
line diff
--- a/vim/vimrc	Sun Jun 01 15:34:00 2014 -0700
+++ b/vim/vimrc	Sun Jul 20 19:36:55 2014 -0700
@@ -219,7 +219,7 @@
 let g:ctrlp_map = ''
 
 " Ctrl-P should manage the working directory.
-let g:ctrlp_working_path_mode = 2
+let g:ctrlp_working_path_mode = 'ra'
 
 " Ctrl-P should however ignore some stuff.
 let g:ctrlp_custom_ignore = {
@@ -279,6 +279,12 @@
 
 if has("autocmd")
 
+    augroup VimRCAutoCWD
+        au!
+
+        autocmd BufEnter * call s:SetProjectRootCwd()
+    augroup END
+
     augroup VimRCFileTypeSettings
         au!
     
@@ -318,23 +324,23 @@
 noremap <C-Tab>   :tabnext<cr>
 noremap <C-S-Tab> :tabprevious<cr>
 
+
 " Window navigation
 nnoremap <C-up> :wincmd k<cr>
 nnoremap <C-down> :wincmd j<cr>
 nnoremap <C-left> :wincmd h<cr>
 nnoremap <C-right> :wincmd l<cr>
 
-" Open NERDtree.
-nnoremap <F2> :NERDTreeToggle %:p:h<cr>
+" Switch buffers.
+nnoremap <F2> :execute ("buffer " . bufname("#"))<cr>
 
-" Switch buffers.
-nnoremap <F3> :execute ("buffer " . bufname("#"))<cr>
-
-" Gundo.
-nnoremap <F5> :GundoToggle<cr>
+" NERDTree.
+nnoremap <F3> :call <SID>ToggleNERDTree()<cr>
+nnoremap <F4> :call <SID>FindInNERDTree()<cr>
 
 " Tagbar.
-nnoremap <F8> :TagbarToggle<cr>
+nnoremap <F5> :TagbarToggle<cr>
+nnoremap <F6> :TagbarOpenAutoClose<cr>
 
 " Common typos.
 nnoremap ; :
@@ -363,7 +369,8 @@
 " Ctrl-P mappings.
 nnoremap <silent> <C-p> :CtrlP<cr>
 nnoremap <silent> <C-o> :CtrlPBuffer<cr>
-nnoremap <silent> <C-i> :CtrlPMRU<cr>
+nnoremap <silent> <C-i> :CtrlPTag<cr>
+nnoremap <silent> <Tab> :CtrlPMRUFiles<cr>
 
 " Switch between FR and US keyboard layouts.
 nnoremap <C-l>f :setlocal keymap=french<cr>
@@ -463,6 +470,65 @@
     call cursor(l, c)
 endfunction
 
+function! s:FindProjectRoot(cur, marker) abort
+    let l:cur = a:cur
+    let l:previous_cur = ''
+    let l:slash = '/'
+    if has('win32')
+        let l:slash = '\\'
+    endif
+    while l:cur != l:previous_cur
+        let l:marker_path = l:cur . l:slash . a:marker
+        if glob(l:marker_path) != ''
+            return fnamemodify(l:cur, ':p')
+        endif
+        let l:previous_cur = l:cur
+        let l:cur = fnamemodify(l:cur, ':h')
+    endwhile
+    return ''
+endfunction
+
+function! s:SetProjectRootCwd() abort
+    let l:cur_file_dir = expand('%:p:h', 1)
+    if l:cur_file_dir =~ '\v^.+://'
+        return
+    endif
+    let l:root = l:cur_file_dir
+    let l:markers = g:ctrlp_root_markers[:]
+    let l:markers += ['.git', '.hg', '.svn', '.bzr', '_darcs']
+    for marker in l:markers
+        let l:proj_root = s:FindProjectRoot(l:cur_file_dir, marker)
+        if l:proj_root != ''
+            let l:root = l:proj_root
+            break
+        endif
+    endfor
+    execute 'lcd!' fnameescape(l:root)
+endfunction
+
+function! s:ToggleNERDTree() abort
+    let l:was_open = nerdtree#isTreeOpen()
+    NERDTreeToggle
+    if !l:was_open
+        wincmd p
+        NERDTreeCWD
+        wincmd p
+        NERDTreeFind
+    endif
+endfunction
+
+function! s:FindInNERDTree() abort
+    if !nerdtree#isTreeOpen()
+        call s:ToggleNERDTree()
+    else
+        if getbufvar('%', 'NERDTreeType') != ''
+            wincmd p
+        else
+            NERDTreeFind
+        endif
+    endif
+endfunction
+
 " }}}
 
 " Temporary stuff {{{
@@ -474,9 +540,20 @@
 command! LawrenciumEnableTrace  :call lawrencium#debugtrace(1)
 command! LawrenciumDisableTrace :call lawrencium#debugtrace(0)
 
+let g:autotags_debug = 1
+
 " Enable debugging PieCrust
 let g:piecrust_debug = 1
 let g:piecrust_trace = 0
 
 " }}}
 
+" Local override {{{
+
+let s:local_vimrc = s:vim_home.'/vimrc.local'
+if filereadable(s:local_vimrc)
+    execute 'source' s:local_vimrc
+endif
+
+" }}}
+