2010-03-13 16 views
21

Spesso mi capita di voler cambiare qualcosa di poco in un colorscheme, ma non voglio modificare il file originale. Ho provato a inserire la mia modifica in "~/.vim/after/colors/blah.vim", ma questo non funziona per me.Override colorscheme


esempio, voglio cambiare l'evidenziazione CursorLine in BusyBee.vim ..

~/.vim/colori/BusyBee.vim

creo il file '~/.vim/dopo/colori/BusyBee.vim' e aggiungere questo:

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

Tuttavia, non vedo il cambiamento. Certo che funziona se cambio la linea nell'originale BusyBee.vim, ma come ho detto preferirei non farlo.

Facendo ...

:colo Busy<TAB> 

mi mostra ...

BusyBee BusyBee 
+0

Perché non basta copiare il tema e modificare la copia? – ocodo

+0

Meno lavoro durante l'aggiornamento. L'idea è che le mie modifiche prevalgano sul tema in modo da poter aggiornare il tema senza dover unire le mie modifiche. – Hannes

risposta

7

Dai un'occhiata allo AfterColors.vim, ti consentirà di utilizzare il metodo ~/.vim/after/colors/BusyBee.vim.

+1

Grazie, amico! = D – Hannes

+1

Abbastanza tardi per questa festa, ma per riferimento, AfterColors.vim è ora rispecchiato (da me) su Github https://github.com/tsiemens/vim-aftercolors, in modo tale che le persone possano semplicemente aggiungerlo alla loro lista di plugin . Ho appena trovato questo thread ieri e ho creato quel repository. Ho pensato di prenderne nota. –

-2

Mettere

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

dopo vostro

colorscheme BusyBee 

voce nel tuo _vimrc.

+3

Non funziona. Scusate. –

4

Non ho 'colorscheme BusyBee' nel mio .vimrc. Mi piace cambiare il colorscheme ogni tanto, quindi voglio "aggiustare" il tema attuale.

Mi è venuta in mente questa soluzione, non la più bella, ma qualsiasi altra cosa.

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 
" }}} 

Eseguirlo automaticamente quando si cambia lo schema dei colori.

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

E questo aiuta a caricare il tuo schema preferito della settimana all'avvio. (Eek !! il default!)

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

.. e questo al vertice di Vimrc

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

Forse c'è già qualcosa per questo 'isFirstRun'?

+0

Sì, sembra molto più semplice, per un ambiente di colori che stai usando periodicamente :) ... A proposito, se non vuoi cambiare il file originale (perché?), Perché non creare una versione 2 di esso e cambialo lì dentro. Davvero non vedo perché la necessità di tutto questo problema di fare nulla. – Rook

+1

Non c'è stato alcun lavoro in questo rispetto al fastidio di "manualmente" aggiustare schemi mentre li si cambia, o portare con me le mie modifiche agli schemi mentre li aggiorno (che dovrei fare manualmente se lo sovrascrivo o lo chiamo qualcos'altro). Sono felice per te che non sei così pignolo per il tuo setup come lo sono io ..;) – Hannes

+1

Wow, ottima soluzione! +1 :) Alla fine ho usato una versione "affettata" di questa risposta. Si basa su questo, quindi non volevo postare una nuova risposta per questo. Puoi visualizzarlo nel mio .vimrc: https://github.com/oryband/dotvim/blob/master/vimrc –

35

Hai chiesto cosa sto cercando oggi. Ho trovato una soluzione più semplice di quelle presentate qui. Voglio lo sfondo trasparente anziché lo sfondo nero dal tema, semplicemente sovrascrivendo il colore dopo che la dichiarazione colorscheme in .vimrc non funziona e l'installazione di un plug-in solo per quello è strano. Ecco cosa ho fatto:

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

Perché funziona?Immagino che vim faccia qualcosa di diverso, basta leggere la tua dichiarazione colorscheme e caricare la dichiarazione e poi leggere la tua istruzione highlight e cambiare il colore. Ad ogni modo sembra che vim cambi solo la combinazione di colori dopo aver letto i file di configurazione. Quindi fornisco un gancio, che cambierà i colori ogni volta che viene cambiata la combinazione di colori. Un buon effetto collaterale è che funziona anche se si cambia la combinazione di colori (si potrebbe fare un blocco if se lo si desidera).

+0

Ciao, sto usando il tema jellybeans e voglio avere un backgruond nero puro, ma in realtà è grigio. Ho aggiunto le righe che hai proposto a .vimrc, ma non succede niente ... cosa devo fare? – tmaric

+1

Hai un terminale trasparente? Lo sfondo nero è trasparente in modo da non diventare nero reale se il tuo terminale è trasparente. Prova ': evidenzia Normal ctermbg = blue' durante una sessione Vim e verifica se imposta lo sfondo su blu. Se lo fa, penso che dovrai modificare le impostazioni del terminale. O forse c'è qualcosa che non conosco. – phunehehe

+0

L'ho provato e solo la prima e l'ultima riga sono impostate in blu, non nell'intera finestra. – tmaric

0

Lo stock synload.vim file in $VIM/vimXX/syntax/synload.vim fa un

runtime! syntax/syncolor.vim 

Questo indirizza vim per leggere la data filespec in ogni directory di runtimepath. Sui sistemi RedHat, la runtimepath sarà qualcosa del tipo:

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

Metti le regolazioni di colore sia in $HOME/.vim/after/syntax/syncolor.vim o nel /usr/share/vim/vimfiles/after/syntax e si dovrebbe essere a posto.

Mentre le regolazioni possono essere semplici direttive hi ..., è apparentemente più complicato. Così ho pesantemente preso in prestito dal file stock syncolor.vim e ora hanno:

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