# HG changeset patch # User Ludovic Chabant # Date 1405903405 25200 # Node ID c6a07235360698dcca953707bed8a5dc6dbdcbc2 # Parent 095fb39b2096816abe594a50ed943cc9f4a83812 Vim config changes: * Better working dir management in `vimrc`. * Better shortcuts for NERDTree and CtrlP. * Misc stuff. diff -r 095fb39b2096 -r c6a072353606 vim/vimrc --- a/vim/vimrc Thu Jul 10 11:05:19 2014 -0700 +++ b/vim/vimrc Sun Jul 20 17:43:25 2014 -0700 @@ -244,6 +244,12 @@ if has("autocmd") + augroup VimRCAutoCWD + au! + + autocmd BufEnter * call s:SetProjectRootCwd() + augroup END + augroup VimRCFileTypeSettings au! @@ -282,7 +288,6 @@ " Tab navigation nnoremap :tabnext nnoremap :tabprevious -nnoremap :tabclose " Buffer navigation nnoremap :bnext @@ -294,14 +299,16 @@ nnoremap :wincmd h nnoremap :wincmd l -" Open NERDtree. -nnoremap :NERDTreeToggle %:p:h +" Switch buffers. +nnoremap :execute ("buffer " . bufname("#")) -" Switch buffers. -nnoremap :execute ("buffer " . bufname("#")) +" NERDTree. +nnoremap :call ToggleNERDTree() +nnoremap :call FindInNERDTree() " Tagbar. -nnoremap :TagbarToggle +nnoremap :TagbarToggle +nnoremap :TagbarOpenAutoClose " Common typos. nnoremap ; : @@ -330,7 +337,8 @@ " Ctrl-P mappings. nnoremap :CtrlP nnoremap :CtrlPBuffer -nnoremap :CtrlPMRU +nnoremap :CtrlPTag +nnoremap :CtrlPMRUFiles " Switch between FR and US keyboard layouts. nnoremap f :setlocal keymap=french @@ -430,6 +438,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 {{{ @@ -441,6 +508,8 @@ 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