LINUX.ORG.RU

[vim] Возможны ли пересекающиеся syn match?

 


0

0

Хочу явно видеть границу в 79 символов в буфере. В гуёвых редакторах как правило в нужном месте рисуется вертикальная линия или меняется цвет фона. Как сделать подобное для vim?

Надумал такую ерунду:

syn match Shortline '^.\{79\}' nextgroup=Overline
syn match Overline '.\+$' display contained
hi Overline ctermbg=black

Но это не совсем то, что нужно. Ладно пес с ним, что выделяются только вылезающие за границу символы, это еще можно пережить. Плохо, что если строка вылезает за границу, в ней перестают подсвечиваться все остальные match, keyword и region.

Так вот вопрос. Как в vim добиться явного отображения границы по ширине (с возможностью таки ее пересечения)?

> Хочу явно видеть границу в 79 символов в буфере. В гуёвых редакторах как правило в нужном месте рисуется вертикальная линия или меняется цвет фона. Как сделать подобное для vim?

Я тоже задавался мыслью как это сделать. Но я пошел дальше. Дело в том, что не очень приятно подсвечивать trailing whitespaces в чужих проектах и файлах наподобие README.TXT.

Я написал простенький плагин который решает эту проблему http://www.vim.org/scripts/script.php?script_id=2635.

badgopher
()
Ответ на: комментарий от anonymous4

> set list listchars=tab:»·,trail:·

> Это не то же самое?

Нет. Здесь ты заменяешь другими метасимволами. А я люблю подсвечивать красным цветом :-)

badgopher
()
Ответ на: комментарий от anonymous4

Ты прав :-) Пойду учить матчасть. Правда необходимость в плагине отпадает. Останется только массив с файлами исключениями. Например, не подсвечивать все файлы с расширениями txt кроме CMakeLists.txt. Хотя это тоже можно обойти.

badgopher
()
Ответ на: комментарий от badgopher

>Например, не подсвечивать все файлы с расширениями txt кроме CMakeLists.txt

Реализуется с помощью механизма ftplugin.

anonymous4
() автор топика
Ответ на: комментарий от badgopher

>не хочу подсвечивать табы, но хочу подсвечивать пробелы затесавшиеся между табами :-)

Для этого целый скрипт не нужен, можно обойтись простым syn match.

anonymous4
() автор топика
Ответ на: комментарий от anonymous4

> Для этого целый скрипт не нужен, можно обойтись простым syn match.

Вот тут я и столкнулся с проблемой matchadd(). Дело в том, что когда ты делаешь matchadd(), то он действует на все буфера. Например, есть один буфер с README.TXT где этой подсветки нету. Потом ты говоришь :e test.cpp и в этом новом буфере подсветка включается. При переходе в предыдущий буфер :b1 ты увидишь, что в README.TXT подсветка также включилась.

Смысл плагина - отрубать подсветку, когда происходит возврат на предыдущий буфер. И больше он ничего не делает :-)

badgopher
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.