Z pewnością możliwe jest użycie innego koloru tła dla elementów wyróżnionych składnią. Wystarczy zdefiniować guibg
i ctermbg
kolory w swoim hilight
poleceniu. Pierwszy z nich ustawia kolor tła dla GUI Vima, a drugi dla terminala Vima.
Ma to jednak istotne ograniczenie, ponieważ może ustawić kolory tła tylko dla znaków, które faktycznie istnieją w pliku.
Powoduje to, że kolor tła nie może rozciągać się poza koniec tekstu w linii do krawędzi okna, więc kolorowanie bloków kodu pokazanych w twoim przykładzie nie jest możliwe:
Możesz także zmienić kolor tła całych linii za pomocą funkcji Znak. (Patrz linehl
w :help sign.txt
)
Należy jednak pamiętać, że:
Wymaga to napisania kodu do umieszczenia znaków w każdym wierszu, który musi być pokolorowany, i aktualizowania ich wraz ze zmianą zawartości pliku,
Domyślnie podczas umieszczania znaku kolumna znaku będzie wyświetlana po lewej stronie okna. Można zmienić kolorystykę kolumny znaku za pomocą SignColumn
grupy wyróżnień, aw nowszych wersjach Vima można ją całkowicie usunąć. (Patrz :help 'signcolumn'
.)
Na przykład, aby dostosować rozwiązanie Carpetsmoker do korzystania z (bardziej niezawodnego) mechanizmu znakowania , możesz wykonać następujące czynności:
" Define a highlight group and a sign that uses it
highlight default markdownCodeBlock ctermbg=230 guibg=lightyellow
sign define codeblock linehl=markdownCodeBlock
" Use signs to highlight code blocks
function! MarkdownBlocks()
function! s:applySign(idx, val)
if a:val[0] == "\t" || a:val[:3] == " "
let l = a:idx + 1
execute "sign place " . l . " line=" . l . " name=codeblock file=" . expand("%:p")
endif
endfunction
" Remove old signs
execute "sign unplace * file=" . expand("%:p")
" Get all lines in a list
let l:lines = getline(1, line('$'))
" Add new signs
call map(l:lines, function('s:applySign'))
endfunction
" Set signs on loading the file, leaving insert mode, and after writing it
au FileType markdown call MarkdownBlocks()
au InsertLeave *.markdown call MarkdownBlocks()
au BufWritePost *.markdown call MarkdownBlocks()
Upraszcza to nieco kod i ma mniej zastrzeżeń niż wersja Carpetsmokera.
@ChristianBrabandt „s DynamicSigns plugin sprawia, że korzystanie z funkcji znak dla tego celu łatwiejszego: on opisuje, jak go używać, aby zrobić w tej odpowiedzi .