在我的.vimrc中,如何检查配色方案的存在?

时间:2011-04-18 03:41:59

标签: vim color-scheme

.vimrc中,是否可以加载配色方案?

6 个答案:

答案 0 :(得分:45)

如果只是想加载它,那么在 try-catch 中使用:colorscheme作为Randy has done可能已经足够了,否则就会执行其他操作。如果您对 else 部分不感兴趣,那么简单的:silent! colorscheme就足够了。

否则,globpath()是可行的方法。然后,如果您愿意,可以使用filereadable()检查返回的每个路径。

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

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

答案 1 :(得分:30)

@eckes答案的替代方法是尝试加载colorscheme并处理错误(如果它不存在):

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

答案 2 :(得分:8)

您可以使用filereadable函数检查是否存在颜色方案(例如schemename):在~/vimfiles/colors下检查一次(Win32,对于Unix使用~/.vim/colors/)和一次在$VIMRUNTIME/colors/下:

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

答案 3 :(得分:6)

我的方法类似,

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

这比硬编码整个路径要强一些。

答案 4 :(得分:1)

这是我在.vimrc文件中拥有的水。

if filereadable( expand("$HOME/.vim/colors/sublimemonokai.vim") )
    colorscheme sublimemonokai "https://github.com/ErichDonGubler/vim-sublime-monokai

    " vim-sublime-monokai only support 256 colours in terminal. If you are using a terminal which support truecolor like iterm2, enable the GUI color
    set termguicolors

    " Otherwise, use below setting to activate the 256 color in terminal
    set t_Co=256
else
    echom "The sublimemonokai.vim were not found to be used as colorscheme. elflord will be set for the timebeing..."
    colorscheme elflord
endif

基本上,它会检查机器上是否存在我喜欢的配色方案。如果是这样,它将选择它并应用所有必要的设置。否则,它将选择vim随附的合适的配色方案。

通过查看其他答案,我的答案与@ user427390答案共享一部分,并且还有其他条件。

以下链接为我编写自己的.vimrc和vim相关文件提供了很多帮助: http://learnvimscriptthehardway.stevelosh.com/

答案 5 :(得分:0)

通常,如果我的收藏夹不可用,我会使用带有后备选项的收藏夹colorscheme。嵌套的try将使此工作有效:

try 
  colorscheme solarized
  catch
  try 
    colorscheme peachpuff
    catch
  endtry
endtry

如果colorscheme都不可用,则将加载默认值(无论系统上发生了什么)。如果一种或两种颜色都不可用,则不会显示任何错误。首先放置您喜欢的colorscheme

此外,不带参数的catch会捕获任何错误。如果您要处理的区域设置会给出不同的错误消息,这将很方便。