2009-12-24 58 views
4

所以我一直在vim中使用NERDTree,因爲它增加了很多功能,可以瀏覽文件系統。通過書籤功能,它可以很好地在項目之間切換。VIM商標和項目管理

但是,我已經開始在vim中越來越多地使用Marks,並想知道是否有人知道允許您設置標記集的插件。就像我想`C去我目前正在處理的項目中的配置文件。我可以在每次切換項目時設置它,但想知道是否有人知道將它們打包的好方法。

在考慮這個問題時,我認爲如果在進入一個目錄(比如在書籤與NERDTree之間切換時)只是讀取一個文件,那將會非常棒。

反正,任何人都知道這樣的事情?

回答

3

事實證明,標記並不存儲在session中,而是存儲在viminfo文件中!因此,我使用vimrc中的代碼作爲基礎,並在vim help files的會話部分的底部找到代碼來創建一個函數,該函數將允許我保存會話和viminfo文件。創建適合我的基本項目管理!

這是我結束的代碼。

if version >= 700 
    " localoptions has to be here: 
    " for some reason, new session loading code fails to set filetype of files in session 
    set sessionoptions=blank,tabpages,folds,localoptions,curdir,resize,winsize,winpos 
endif 

command! -nargs=1 Project :call LoadProject('<args>') 
command! -nargs=+ SaveProject :call SaveProject('<args>') 

let s:projectloaded = 0 
let s:loadingproject = 0 
let s:projectname = '' 

function! LoadProject(name) 

    let s:projectloaded = 1 
    let s:projectname = a:name 
    exe "source ~/vimfiles/projects/".a:name.".vim" 
    exe "rviminfo! ~/vimfiles/projects/".a:name.".viminfo" 

endfunction 

function! SaveProject(name) 

    if a:name ==# '' 
     if s:projectloaded == 1 
      let pname = s:projectname 
     endif 
    else 
     let pname = a:name 
    endif 

    if pname !=# '' 
     let s:projectloaded = 0 
     let s:projectname = '' 
     exe "mksession! ~\\vimfiles\\projects\\".pname.".vim" 
     exe "wviminfo! ~\\vimfiles\\projects\\".pname.".viminfo" 
    endif 

endfunction 

autocmd VimLeave * call SaveProject() 
+0

謝謝。這段代碼適合我,** + 1 **。大寫的標記是驚人的,現在我不會失去它們中的任何一個。 – Birei 2013-10-05 14:52:08

3

我相信標記存儲在會話文件中,這可能會讓你做你想做的事。會話管理本身是另一個話題,但您可以找到一些想法here。此代碼已更新爲包含對多個會話文件的支持,因此請獲取最新的this vimrc文件。

+0

聽起來像這樣會很好用I.與NERDTree書籤結合。使用NERDTree,您可以輕鬆地將cwd切換到書籤,然後您可以輕鬆地從該工作目錄加載會話。 我會試一試謝謝。 – Boushley 2009-12-25 21:05:47