Как сделать так, чтобы синтаксис vim выделял целую строку?

Я бы хотел, чтобы vim выделял целые строки, соответствующие определенным шаблонам. Я могу выделить весь текст в строке (выполнив syn match MyMatch "^.*text-to-match.*$"), но всегда останавливается в конце текста. Я бы хотел продолжить до конца семестра, выделив CursorLine.

Я попытался заменить $ на \n^, надеясь, что это обернется. Без изменений. (На самом деле я не ожидал, что это сработает, но попытка не повредит.) Я также попытался настроить смещение syn-pattern-offset (о котором я читал здесь: http://vimdoc.sourceforge.net/htmldoc/syntax.html#:syn-pattern). Короче говоря, добавление he=he-5 выделит на 5 символов меньше, но he=he+5 не покажет никаких дополнительных символов, потому что нет символов для выделения.

Это моя первая попытка создать синтаксис vim, и я относительно новичок в vim. Пожалуйста, будьте осторожны и дайте объяснения.

Спасибо!

(редактировать: забыл включить, это многострочная подсветка. Это, вероятно, немного увеличивает сложность.)


person valadil    schedule 27.01.2010    source источник
comment
Ваш шаблон должен читать ^.*text-to-match.*$?   -  person Cascabel    schedule 28.01.2010
comment
Джефроми, это так. SO, по-видимому, использует обернутые звездочки для выделения курсивом. Теперь это исправлено.   -  person valadil    schedule 28.01.2010
comment
Никаких других синтаксисов, но вполне возможно, что остальная часть моего синтаксиса дубасит сама себя. Может быть, мне стоит начать с тех строк, которые я хочу полностью выделить, а затем написать остальные, когда они заработают?   -  person valadil    schedule 28.01.2010
comment
О, я полностью читаю всю строку как целую строку текста. Я подозреваю, что на самом деле это невозможно.   -  person Cascabel    schedule 28.01.2010
comment
искал то же самое, и на самом деле это сработало для меня, опуская ^ и $   -  person Rhubarb    schedule 07.07.2014


Ответы (3)


Из документации на syn-pattern:

Выделенная область никогда не будет за пределами совпадающего текста.

Я считаю себя удивленным, если у вас это сработает, но, опять же, Vim всегда полон сюрпризов.

person Jay    schedule 27.01.2010
comment
Да, но образец соответствует всей строке. Следует выделить всю строку. - person Cascabel; 28.01.2010
comment
Если в окне 80 символов, а в тексте 4 символа, совпадают только 4 символа и выделяются только 4 символа. OP хочет, чтобы были выделены все 80 столбцов. - person Jay; 28.01.2010
comment
Джей прав. Невозможно имитировать поведение параметра cursorline с помощью стандартной подсветки синтаксиса. Подсветка синтаксиса просто предназначена для выделения существующего текста. - person jamessan; 28.01.2010
comment
Это прискорбно, но также объясняет, почему я не смог этого понять :-P - person valadil; 28.01.2010

Это не очень адаптивно, так как имя файла (буфер) и строка до полного выделения строки должны быть явно указаны, но, очевидно, sign можно использовать:

Можно выделить всю строку с помощью механизма : sign.
Пример можно найти на :help sign-commands
Вкратце:

:sign define wholeline linehl=ErrorMsg
:sign place 1 name=wholeline line=123 file=thisfile.txt

Очевидно, вам следует выбрать группу выделения, которая изменяет цвет фона для аргумента linehl.

источник: Эрик Фалор, список рассылки vim

person matt wilkie    schedule 12.12.2010
comment
Вы можете выделить таким образом всю строку на заднем плане, но текст будет терять подсветку синтаксиса. - person Andy Stewart; 12.09.2017

можно также попробовать: установить строку курсора: установить цвета изменения столбца курсора следующим образом:: hi cursorline: hi cursorcolumn, используя обычный термин =, ctermfg =, ctermbg = и т. д. см. этот ответ VIM Выделить всю текущую строку

person jmarina    schedule 05.07.2018