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

Clo*_*boy 46 vim color-scheme

在a中.vimrc,是否可以仅在颜色方案存在时加载?

Luc*_*tte 46

使用:colorschemetry-catch代码兰迪已经做可能是不够的,如果你只是想,如果它存在加载它,做别的事情并非如此.如果你对else部分不感兴趣,那么简单:silent! colorscheme就足够了.

否则,globpath()是要走的路.filereadable()如果你真的希望的话,你可以检查返回的每条路径.

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

" .vimrc
if has#colorscheme('desert')
     ...
Run Code Online (Sandbox Code Playgroud)

  • 去寻求`:沉默!colorscheme foo`非常适合我的需求,谢谢. (8认同)

Ran*_*ris 31

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

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


eck*_*kes 8

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

if filereadable("/path/to/schemename.vim")
  colo schemename
endif
Run Code Online (Sandbox Code Playgroud)


小智 7

我的方法很相似,

if filereadable( expand("$HOME/.vim/colors/railscast.vim") )
    colorscheme railscast
endif
Run Code Online (Sandbox Code Playgroud)

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


小智 6

通常,如果我最喜欢的内容不可用,我会使用最喜欢的内容colorscheme并进行后备。嵌套try将使此工作有效:

try 
  colorscheme solarized
  catch
  try 
    colorscheme peachpuff
    catch
  endtry
endtry
Run Code Online (Sandbox Code Playgroud)

如果两者都不colorscheme可用,则会加载默认的(无论您的系统上有什么)。如果一种或两种颜色方案不可用,则不会显示错误。把你最喜欢的放在第一位colorscheme

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