Цветная подсветка фонового кода кодового блока в Vim - PullRequest
10 голосов
/ 16 сентября 2010

У меня есть документы Vim, в которых есть области кодового блока, в которых используются области «синтаксис включают», чтобы подсветка синтаксиса отличалась от основного документа. Например, у меня определена область синтаксиса с именем «pyregion», которую я использую при вводе кода Python. Области пирегиона документа затем выделяются с помощью настройки в файле синтаксиса Python, а область за пределами области использует файл синтаксиса основного документа.

Я хочу, чтобы весь фон в области Python был закрашен другим цветом, чтобы отличать его от областей, не относящихся к Python, в документе. Я могу получить часть пути, введя фон для всего региона Python:

:highlight pyregion guibg=#555555

Но указанная выше команда изменяет фон только для областей, на которых есть текстовые символы, а не для всего фона области, которая, как представляется, по-прежнему управляется как остальная часть документа цветом фона, определенным для «Нормальная» группа. Это нормально - это привлекает внимание к области, но выглядит пятнисто, потому что только сами символы кода имеют разный фон, а не всю полосу области по всему экрану.

Есть ли какой-нибудь способ получить однородную полосу другого цвета фона по всему региону, а не только по части региона, где есть символы?

В следующей ссылке есть связанный вопрос и ответ, но, насколько я могу судить, этот ответ также меняет фон только там, где есть текст: Подсветка фоновых блоков кода с помощью Vim

Спасибо за любую помощь.

Ответы [ 2 ]

7 голосов
/ 16 сентября 2010

Я не верю, что это возможно без нелепой ошибки (см. Ниже). Если вы попробуете это:

:match Error /\%3l/

Он выделяет то, что Vim считает всей строкой 3. Подсветка распространяется только на конец символов. Это заставляет меня подозревать, что не будет никакого способа выделить несуществующие символы.


Хватит читать сейчас.

Чисто как нелепое упражнение, вы, конечно, можете добавить огромное количество пробелов в конце каждой строки, а затем удалить их при сохранении. Это было бы глупо, но это единственное, о чем я могу думать.

" Add spaces to the end of every line (you could also do
" this selectively for lines that don't already have lots
" of spaces and you could do it on reading a file or whatever)
:exe '%s/$/' . repeat(' ', 1000) . '/'
" Automatically remove spaces at the end of every line when saving
:autocmd BufWritePre %s/ *$//
" Make 'A' append at the end of the non-space characters on the line
:nmap A / *$<CR>i
" Make '$' go to the end of the non-space characters on the line
:nmap $ /.\? *$<CR>

Отказ от ответственности: не делайте этого.

3 голосов
/ 11 ноября 2013

Да, вы можете сделать это, используя команду sign.

http://vimdoc.sourceforge.net/htmldoc/sign.html

sign define 1 linehl=Error
sign place 1 name=er1 line=1 file=file.txt

Подсветит первую строку файла file.txt вплоть до края терминала.

...