En mi.vimrc, ¿cómo puedo comprobar la existencia de un esquema de color?


En un .vimrc, ¿es posible cargar un esquema de color solo si existe?

Author: ClosureCowboy, 2011-04-18

5 answers

Usar :colorschemeen un try-catchcomo Randy ha hecho puede ser suficiente si solo quieres cargarlo si existe y hacer algo más de lo contrario. Si no estás interesado en la parte else, un simple :silent! colorscheme es suficiente.

De lo contrario, globpath() es el camino a seguir. Puedes, tehn, comprobar cada ruta devuelta con filereadable() si realmente lo deseas.

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

" .vimrc
if has#colorscheme('desert')
     ...
 42
Author: Luc Hermitte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:11

Una alternativa a la respuesta de @eckes sería intentar cargar el colorscheme y lidiar con el error si no existe:

try
    colorscheme mayormaynotexist
catch /^Vim\%((\a\+)\)\=:E185/
    " deal with it
endtry
 26
Author: Randy Morris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-18 14:25:37

Usted podría utilizar el filereadable función para comprobar si existe una combinación de colores (por ejemplo, schemename): compruebe una vez en ~/vimfiles/colors (Win32, para uso Unix ~/.vim/colors/) y una vez en $VIMRUNTIME/colors/:

if filereadable("/path/to/schemename.vim")
  colo schemename
endif
 8
Author: eckes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-18 04:54:41

Mi método es similar,

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

Esto es un poco más robusto que codificar todo el camino.

 6
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-14 20:43:17

Normalmente uso un favorito colorscheme con una reserva si mi favorito no está disponible. Un try anidado hará que esto funcione:

try 
  colorscheme solarized
  catch
  try 
    colorscheme peachpuff
    catch
  endtry
endtry

Si ninguno de los dos colorscheme está disponible, se carga el predeterminado (sea lo que sea que esté en su sistema). No se muestran errores si uno o ambos colores no están disponibles. Ponga primero su colorscheme preferido.

También, catch sin argumentos captura cualquier error. Esto es útil si está tratando con diferentes ubicaciones que dan diferentes errores mensaje.

 0
Author: jebidiam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-04 21:44:00