Parcourir la source

Add a simple way to handle vim configurations per project

Emmanuel Bouthenot il y a 11 ans
Parent
commit
40654ea910
1 fichiers modifiés avec 54 ajouts et 0 suppressions
  1. 54 0
      .vim/vimrc

+ 54 - 0
.vim/vimrc

@@ -406,3 +406,57 @@ let g:ctrlp_map = '<c-o>'
 let g:ctrlp_max_height = 20
 " Add a key to search in opened buffers
 map <c-b> :CtrlPBuffer<cr>
+
+
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" Project environment
+"
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+let g:vim_project_file_name = '.vim_project'
+
+function! GetSubPaths()
+    let sep = '&'
+    let paths = ''
+    let curdir = expand('%:p:h')
+    while curdir != '/'
+        let paths = paths . sep . curdir
+        let curdir = fnamemodify(curdir, ':h')
+    endwhile
+    let paths = paths . sep . '/'
+    return split(paths, sep)
+endfunction
+
+function! GetVimProjectDir()
+    let projectdir = ''
+    let subpaths = GetSubPaths()
+    let length = len(subpaths)
+    let i = 0
+    while i < length && projectdir == ''
+        if subpaths[i] == '/'
+            let projectfile = '/' . g:vim_project_file_name
+        else
+            let projectfile = subpaths[i] . '/' . g:vim_project_file_name
+        endif
+        if filereadable(projectfile)
+            let projectdir = subpaths[i]
+        endif
+        let i = i + 1
+    endwhile
+    if projectdir == ''
+        let projectdir = getcwd()
+    endif
+    return projectdir
+endfunction
+
+let g:vim_project_dir = GetVimProjectDir()
+let g:vim_project_file = vim_project_dir . '/' . vim_project_file_name
+
+execute 'set tags=' . g:vim_project_dir . '/tags'
+
+if has('autocmd')
+    execute "autocmd BufRead " . g:vim_project_file_name . " set filetype=vim"
+endif
+
+if filereadable(g:vim_project_file)
+    execute 'source ' . g:vim_project_file
+endif