2011-04-18 102 views

回答

38

TR使用:colorscheme y-catch as Randy has done可能就足夠了,如果你只是想要加載它,如果它存在和做其他事情。如果您對其他部件不感興趣,則簡單的:silent! colorscheme就足夠了。

否則,globpath()是要走的路。如果您真的希望的話,您可以檢查與filereadable()一起返回的每條路徑。

" {rtp}/autoload/has.vim 
function! has#colorscheme(name) 
    pat = 'colors/'.a:name.'.vim' 
    return !empty(globpath(&rtp, pat)) 
endfunction 

" .vimrc 
if has#colorscheme('desert') 
    ... 
+4

去':沉默! colorscheme foo'非常適合我的需求,謝謝。 – mat 2012-11-29 16:46:08

8

您可以使用filereadable功能檢查,如果一個配色方案(如schemename)存在:~/vimfiles/colors下檢查一次(Win32的,對於Unix使用~/.vim/colors/),一旦$VIMRUNTIME/colors/下:

if filereadable("/path/to/schemename.vim") 
    colo schemename 
endif 
+0

謝謝你的回答! – ClosureCowboy 2011-04-19 04:28:29

+0

Exactlt我需要 – eddy147 2012-07-27 06:47:49

25

的替代@ eckes答案將嘗試加載色彩方案和處理錯誤,如果它不存在:

try 
    colorscheme mayormaynotexist 
catch /^Vim\%((\a\+)\)\=:E185/ 
    " deal with it 
endtry 
+1

謝謝。我不知道你可以在.vimrc中執行'try-catch'! – ClosureCowboy 2011-04-19 04:28:58

+0

您能解釋更多關於catch正則表達式語法的含義嗎?我不明白爲什麼不僅僅是'/^E185:/' – 2017-02-02 01:28:04

+0

我簡單地使用了':help catch'中的例子,因爲我認爲它將是確切的錯誤格式。 – 2017-02-02 11:35:34

6

我的方法是類似的,

if filereadable(expand("$HOME/.vim/colors/railscast.vim")) 
    colorscheme railscast 
endif 

這比硬編碼的整個路徑多了幾分穩健。