Конечно, можно использовать другой цвет фона для выделенных синтаксисом элементов. Просто определите guibg
и ctermbg
цвета в вашей hilight
команде. Первый устанавливает цвет фона для графического интерфейса Vim, а второй - для терминала Vim.
Однако это имеет важное ограничение: он может устанавливать цвета фона только для символов, которые фактически существуют в файле.
Результатом этого является то, что цвет фона не может простираться за конец текста на линии до края окна, поэтому раскраска блоков кода, показанная в вашем примере, невозможна:
Вы также можете изменить цвет фона целых линий, используя функцию подписи. (См. linehl
В :help sign.txt
)
Однако обратите внимание, что:
Это требует написания кода для размещения знаков в каждой строке, которая должна быть окрашена, и их обновления по мере изменения содержимого файла,
По умолчанию при размещении знака столбец знака будет отображаться в левой части окна. Можно изменить окраску столбца знака с группой SignColumn
подсветки, и в более поздних версиях Vim ее можно полностью удалить. (См :help 'signcolumn'
.)
Например, чтобы адаптировать решение Carpetsmoker для использования (более надежного) механизма подписи, вы можете сделать следующее:
" 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()
Это несколько упрощает код и имеет меньше предостережений, чем версия Carpetsmoker.
@ChristianBrabandt «s DynamicSigns плагин делает с помощью функции Sign для этой цели проще: он описывает , как использовать его , чтобы сделать это в этом ответе .