2015-08-28 77 views
1

我在vim中使用病原體來管理我的插件,並且我在vimrc中有一個部分,我希望只在某個插件未安裝/不會加載的情況下運行。例如。在病毒與vim中,我如何檢查插件是否會被加載?

if(dwm.vim not in use) 
    nnoremap <C-h> <C-w>h 
    nnoremap <C-j> <C-w>j 
    nnoremap <C-k> <C-w>k 
    nnoremap <C-l> <C-w>l 
endif 

,將可能在大多數情況下這兩個選項是檢查dwm.vim是g:pathogen_disabled和/或檢查,如果目錄.vim/bundle/dwm.vim存在。

但是,這些檢查似乎有些脆弱。例如,如果我沒有dwm檢查dwm.vim是否被禁用病原體是不夠的,並且如果由於某種原因dwm.vim處於某個非標準位置,仍然進入runtimepath,路徑檢查將不會工作。

病原體的關鍵在於使我的runtimepath更容易管理,所以一個優雅的解決方案就是搜索這條路徑。但尋找幫助,病原體來源,谷歌,並在這裏透露沒有簡單的方法來做到這一點。我可以在vim/pathogen本身做到這一點嗎?有沒有一個插件可以幫我做到這一點?我應該不這樣做,因爲檢查失敗的情況是相當嚴重的,並且只要我正確管理我的插件就不會發生這種情況。

回答

2

pathogen#infect()後補充一點:

if globpath(&runtimepath, 'dwm.vim', 1) !=# '' 
    " dwm.vim caught in the act 
endif 
+0

完美的感謝。正是我想要的,並且推廣到我想搜索'rtp'而不是搜索插件的情況。 – Danwizard208

4

大多數插件有一個(重)列入後衛。通常命名爲g:loaded_pluginname。使用這個和以後的目錄,你可以有條件地加載你的映射。

放入~/.vim/after/plugin/dwm.vim如下:

if !get(g:, 'loaded_dwm', 0) 
    nnoremap <C-j> <C-w>j 
    nnoremap <C-k> <C-w>k 
    nnoremap <C-l> <C-w>l 
endif 

如需更多幫助,請參見:

:h write-plugin 
:h after-directory 
:h get() 
+0

這很好,但依賴於定義包含警衛的插件。 – Danwizard208

+0

dwm.vim從正常方案中解脫出來,並使用'g:dwm_version'作爲其包含守衛。 –