2010-03-13 6 views
21

Ich finde oft, dass ich nur etwas in einem Farbschema ändern möchte, aber ich möchte nicht die Originaldatei bearbeiten. Ich habe versucht, meine Änderung in "~/.vim/after/colors/blah.vim" zu setzen, aber das funktioniert nicht für mich.Override colorscheme


Beispiel, ich will in BusyBee.vim die CursorLine Highlight ändern ..

~/.vim/Farben/BusyBee.vim

Ich erstelle die Datei ‚~/.vim/nach/Farben/BusyBee.vim‘und fügen Sie diese:

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

aber ich habe nicht die Veränderung sehen. Natürlich funktioniert es, wenn ich die Zeile in der originalen BusyBee.vim ändere, aber wie ich sagte, würde ich es lieber nicht machen.

tun ...

:colo Busy<TAB> 

mir Shows ...

BusyBee BusyBee 
+0

Warum nicht einfach das Thema kopieren und die Kopie bearbeiten? – ocodo

+0

Weniger Arbeit beim Aktualisieren. Die Idee ist, dass meine Änderungen das Theme überschreiben, damit ich das Theme einfach aktualisieren kann, ohne meine Änderungen zusammenführen zu müssen. – Hannes

Antwort

7

Werfen Sie einen Blick auf AfterColors.vim, es wird Ihnen ermöglichen, die ~/.vim/after/colors/BusyBee.vim Methode zu verwenden.

+1

Danke, Kumpel! = D – Hannes

+1

Ziemlich spät zu dieser Party, aber als Referenz, AfterColors.vim wird jetzt gespiegelt (von mir) auf Github https://github.com/tsiemens/vim-aftercolors, so dass die Leute es einfach zu ihrer Plugin-Liste hinzufügen können . Ich habe gerade diesen Thread gestern gefunden und diesen Repo erstellt. Ich dachte, ich sollte es notieren. –

-2

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

nach dem

colorscheme BusyBee 

Eintrag in Ihrem _vimrc.

+3

Funktioniert nicht. Es tut uns leid. –

4

Ich habe 'colorscheme BusyBee' in meinem .vimrc nicht. Ich wechsle gerne ab und zu Farbschema, also möchte ich das eigentliche Thema "fixieren".

Ich kam mit dieser Lösung, nicht die schönste, aber was auch immer.

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

Führen Sie es automatisch beim Ändern des Farbschemas.

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

Und dies hilft, Ihre Lieblings-Schema-der-Woche beim Start zu laden. (EEK !! den Standard!)

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

.. und diese an der Spitze von .vimrc

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

Vielleicht gibt es schon etwas für diese 'isFirstRun' ist?

+0

Yeees, das sieht viel einfacher aus, für ein Farbschema, das Sie regelmäßig verwenden :) ... Btw, wenn Sie nicht die ursprüngliche Datei ändern möchten (warum?), Warum nicht einfach eine Version 2 davon machen und ändere es dort hinein. Ich verstehe wirklich nicht, warum die Notwendigkeit dieses ganzen Problems aus nichts besteht. – Rook

+1

Es gab keine Arbeit, dies zu tun, verglichen mit dem Ärger der "manuellen" Anpassung Schemata, wie Sie sie ändern, oder bringen Sie meine Änderungen in Schemata, wie ich sie aktualisieren (was ich manuell tun müsste, wenn ich es überschrieben oder benannt etwas anderes). Ich freue mich für Sie, dass Sie nicht so wählerisch über Ihre Einrichtung sind wie ich bin ..;) – Hannes

+1

Wow, tolle Lösung! +1 :) Ich habe schließlich eine "aufgeschnittene" Version dieser Antwort verwendet. Es basiert auf diesem, also wollte ich keine neue Antwort dafür veröffentlichen. Sie können es in meiner .vimrc anzeigen: https://github.com/oryband/dotvim/blob/master/vimrc –

35

Sie haben gefragt, wonach ich heute suche. Ich fand eine einfachere Lösung als die hier vorgestellten. Ich möchte transparenten Hintergrund anstelle des schwarzen Hintergrunds aus dem Thema, während einfach überschreiben die Farbe nach der colorscheme Anweisung in .vimrc funktioniert nicht und die Installation eines Plugins nur für das ist seltsam. Hier ist, was ich getan habe:

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

Warum funktioniert es?Ich denke, dass vim tut etwas anderes als nur lesen Sie Ihre colorscheme Anweisung und laden Sie die Anweisung und lesen Sie dann Ihre highlight Anweisung und ändern Sie die Farbe. Wie auch immer, es sieht so aus, als ob vim nur das Farbschema nach dem Lesen der Konfigurationsdateien ändert. Also biete ich einen Haken an, der die Farben jedes Mal ändert, wenn das Farbschema geändert wird. Ein schöner Nebeneffekt ist, dass dies auch funktioniert, wenn Sie Ihr Farbschema wechseln (Sie könnten einen if Block machen, wenn Sie möchten).

+0

Hallo, ich benutze das Jelly Beans Thema und möchte ein reines schwarzes Hintergrundbild haben, aber es ist eigentlich grau. Ich habe die Zeilen hinzugefügt, die Sie der .vimrc vorgeschlagen haben, aber nichts passiert ... Was mache ich? – tmaric

+1

Haben Sie ein transparentes Terminal? Der schwarze Hintergrund ist transparent, sodass Sie kein echtes Schwarz erhalten, wenn Ihr Terminal transparent ist. Versuchen Sie ': markieren Sie während einer Vim-Sitzung Normal ctermbg = blue 'und sehen Sie, ob es Ihren Hintergrund blau setzt. Wenn dies der Fall ist, müssen Sie Ihre Terminaleinstellungen ändern. Oder vielleicht gibt es etwas, von dem ich nichts weiß. – phunehehe

+0

Ich habe es versucht und nur die erste und die letzte Zeile sind blau, nicht das ganze Fenster. – tmaric

0

Die Aktie synload.vim Datei in $VIM/vimXX/syntax/synload.vim funktioniert ein

runtime! syntax/syncolor.vim 

Diese vim die angegebene Dateispezifikation in jedem Verzeichnis von runtimepath zu lesen leitet. Auf RedHat-Systemen wird die runtimepath so etwas wie:

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

Ihre Anpassungen in Farbe Setzen Sie entweder $HOME/.vim/after/syntax/syncolor.vim oder im /usr/share/vim/vimfiles/after/syntax und Sie sollten gut zu gehen.

Während Ihre Anpassungen einfach hi ... Direktiven sein können, ist es anscheinend komplizierter. Also habe ich mich schwer geliehen aus dem Lager syncolor.vim Datei und habe jetzt:

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