2010-03-13 22 views
21

A menudo me encuentro queriendo cambiar solo algo pequeño en un esquema de colores, pero no quiero editar el archivo original. Traté de poner mi cambio en '~/.vim/after/colours/blah.vim', pero eso no funciona para mí.Sobrescribir el esquema de colores


ejemplo, quiero cambiar el punto culminante CursorLine en BusyBee.vim ..

~/.vim/colores/BusyBee.vim

puedo crear el archivo '~/.vim/después/colores/BusyBee.vim' y añadir lo siguiente:

hi CursorLine guibg=#000000 ctermbg=Black cterm=none 

sin embargo, no veo el cambio. Por supuesto, funciona si cambio la línea en el BusyBee.vim de origen, pero como dije, preferiría no hacer eso.

Haciendo ...

:colo Busy<TAB> 

me muestra ...

BusyBee BusyBee 
+0

¿Por qué no copiar el tema y editar la copia? – ocodo

+0

Menos trabajo al actualizar. La idea es hacer que mis cambios anulen el tema, así que puedo simplemente actualizar el tema sin tener que fusionar mis cambios. – Hannes

Respuesta

7

Eche un vistazo a AfterColors.vim, le permitirá usar el método ~/.vim/after/colors/BusyBee.vim.

+1

¡Gracias, amigo! = D – Hannes

+1

Ya es tarde para esta fiesta, pero como referencia, AfterColors.vim ahora está reflejado (por mí) en Github https://github.com/tsiemens/vim-aftercolors, de modo que las personas pueden simplemente agregarlo a su lista de complementos. . Acabo de encontrar este hilo ayer, y he creado ese repositorio. Pensé que debería tomar nota. –

-2

Deja

hi CursorLine guibg=#000000 ctermbg=Black cterm=none 

después de su

colorscheme BusyBee 

entrada en su _vimrc.

+3

No funciona. Lo siento. –

4

No tengo 'colorcheme BusyBee' en mi .vimrc. Me gusta cambiar el esquema de colores de vez en cuando, por lo que quiero "arreglar" el tema real.

Se me ocurrió esta solución, no la más bonita, pero lo que sea.

function! FixColorscheme() " {{{ 
    echo "fixing colorscheme" 
    if has("gui_running") 
     if (g:colors_name =~ "busybee") 
      hi Folded  guibg=#001336 guifg=#003DAD gui=none 
      hi CursorLine guibg=#000000 ctermbg=Black cterm=none 

     elseif (g:colors_name =~ "256-jungle") 
      hi CursorLine guibg=#000000 ctermbg=Black cterm=none 

     elseif (g:colors_name =~ "xoria256") 
      hi Folded  guibg=#001336 guifg=#003DAD gui=none cterm=none 
      "hi Folded   ctermbg=234 ctermfg=25 cterm=none 
     endif 
    elseif &t_Co == 256 
     if (g:colors_name =~ "busybee") 
      hi Folded  guibg=#001336 guifg=#003DAD gui=none 
      hi CursorLine guibg=#000000 ctermbg=Black cterm=none 

     elseif (g:colors_name =~ "256-jungle") 
      hi CursorLine guibg=#000000 ctermbg=Black cterm=none 

     elseif (g:colors_name =~ "xoria256") 
      hi Folded   ctermbg=234 ctermfg=25 cterm=none 
      hi CursorLine cterm=none 
     "else 
      "hi CursorLine  ctermbg=0     cterm=none 
     endif 
    endif 
    endfunction 
" }}} 

Ejecútelo automáticamente cuando cambie el esquema de color.

augroup mycolorschemes 
    au! 
    au ColorScheme * call FixColorscheme() 
augroup END 

y esto ayuda a cargar su favorito-esquema-de-la-semana en el inicio. (EEK !! el defecto!)

if iSFirstRun == 1 
    echo "HI" 
    colo xoria256 
    call FixColors() 
endif 

.. y esto en la parte superior de .vimrc

"" To let us set some settings only once. {{{ 
    if exists("isRunning") 
     let isFirstRun = 0 
    else 
     let isFirstRun = 1 
    endif 
    let isRunning = 1 
" }}} 

Tal vez ya hay algo en este 'isFirstRun'?

+0

Yeees, que se ve mucho más simple, para un esquema de colores que está usando periódicamente :) ... Por cierto, si no quiere cambiar el archivo original (¿por qué?), ¿Por qué no simplemente crear una versión 2 y cambiarlo allí. Realmente no veo por qué la necesidad de todo este problema se resuelve de la nada. – Rook

+1

No hubo trabajo para hacer esto en comparación con la molestia de los esquemas de ajuste "manualmente" a medida que cambias a ellos, o trayendo mis cambios a los esquemas a medida que los actualizo (lo que tendría que hacer manualmente si lo sobreescribí o lo llamé) algo más). Me alegra que no seas tan exigente con tu configuración como yo ...;) – Hannes

+1

¡Guau, gran solución! +1 :) Eventualmente utilicé una versión "en rebanadas" de esta respuesta. Está basado en este, así que no quería publicar una nueva respuesta para él. Puedes verlo en mi .vimrc: https://github.com/oryband/dotvim/blob/master/vimrc –

35

Ha preguntado qué estoy buscando hoy. Encontré una solución más simple que las presentadas aquí. Quiero fondo transparente en lugar del fondo negro del tema, mientras que simplemente anula el color después de que la declaración colorscheme en .vimrc no funciona y la instalación de un complemento solo para eso es extraño. Esto es lo que hice:

autocmd ColorScheme * highlight Normal ctermbg=None 
autocmd ColorScheme * highlight NonText ctermbg=None 

¿Por qué funciona?Supongo que vim hace algo más que leer tu declaración colorscheme y cargar la declaración y luego leer tu declaración highlight y cambiar el color. De todos modos, parece que vim solo cambia el esquema de colores después de leer los archivos de configuración. Entonces proporciono un gancho, que cambiará los colores cada vez que se cambie el esquema de color. Un buen efecto secundario es que esto funciona incluso si cambia su esquema de color (puede hacer un bloque if si lo desea).

+0

Hola, estoy usando el tema jellybeans y quiero tener un fondo negro puro, pero en realidad es gris. He agregado las líneas que propones al .vimrc, pero no sucede nada ... ¿qué debo hacer? – tmaric

+1

¿Tiene un terminal transparente? El fondo negro es transparente, por lo que no obtendrás negro real si tu terminal es transparente. Pruebe ': resalte Normal ctermbg = azul' durante una sesión de Vim y vea si establece el fondo en azul. Si lo hace, creo que tendrá que cambiar la configuración de su terminal. O tal vez hay algo que no sé. – phunehehe

+0

Lo he intentado y solo la primera y la última línea están configuradas en azul, no en toda la ventana. – tmaric

0

El archivo stock synload.vim en $VIM/vimXX/syntax/synload.vim hace un

runtime! syntax/syncolor.vim 

Esto dirige vim para leer la especificación de archivo determinado en cada directorio de runtimepath. En los sistemas RedHat, el runtimepath será algo como:

$HOIME/.vim,/usr/share/vim/vimfiles,/usr/share/vim/vim72,/usr/share/vim/vimfiles/after,$HOME/.vim/after 

Ponga sus ajustes de color, ya sea en $HOME/.vim/after/syntax/syncolor.vim o en el /usr/share/vim/vimfiles/after/syntax y usted debe ser bueno para ir.

Si bien sus ajustes pueden ser simples directivas hi ..., es aparentemente más complicado. Por lo tanto, en gran medida tomada del archivo stock syncolor.vim y ahora tienen:

if !exists("syntax_cmd") || syntax_cmd == "on" 
    " ":syntax on" works like in Vim 5.7: set colors but keep links 
    command -nargs=* SynColor hi <args> 
    command -nargs=* SynLink hi link <args> 
else 
    if syntax_cmd == "enable" 
    " ":syntax enable" keeps any existing colors 
    command -nargs=* SynColor hi def <args> 
    command -nargs=* SynLink hi def link <args> 
    elseif syntax_cmd == "reset" 
    " ":syntax reset" resets all colors to the default 
    command -nargs=* SynColor hi <args> 
    command -nargs=* SynLink hi! link <args> 
    else 
    " User defined syncolor file has already set the colors. 
    finish 
    endif 
endif 

" Change comment color from bright cyan to gray 
" The bold cyan conflicts with variables and other colors 
if &background == "dark" 
    SynColor Comment  term=bold cterm=NONE ctermfg=Gray ctermbg=NONE gui=NONE guifg=#80a0ff guibg=NONE 
endif 

delcommand SynColor 
delcommand SynLink 
Cuestiones relacionadas