Я занимаюсь этим часами сегодня, изучаю онлайн и читаю руководство по vim.Я почти сошел с ума.Я хочу отформатировать строки с метками времени, чтобы они имели зеленый текст, а сами метки выделялись жирным шрифтом.Например, если у меня есть следующие 4 строки:
1 [ 20:42:57 20190601 ] Apple car truck a whole bunch of other nonsense
2 ball baby zebra more nonsense
3 [ 20:43:12 20190601 ] dog blah blah blah
4 circle mouse rat up down left right b a b a select start
Тогда обе строки, содержащие метки времени (строки 2 и 4), будут иметь зеленый текст, а сами метки времени ([ 20:42:57 20190601 ]
* 1006)* и [ 20:43:12 20190601 ]
) будут выделены жирным шрифтом.
Моей первой мыслью было просто использовать шаблон регулярного выражения, чтобы сопоставить все строки с отметкой времени и покрасить их в зеленый цвет, а затем использовать другой шаблон регулярного выражения.только для самих отметок времени и выделите их жирным шрифтом, например:
syntax match timestampline "\[ \([0-9]\{2}\:\)\{2}[0-9]\{2} [0-9]\{8} \].*$"
highlight timestampline ctermfg=green ctermbg=NONE
syntax match timestamponly "\[ \([0-9]\{2}\:\)\{2}[0-9]\{2} [0-9]\{8} \]"
highlight timestamponly cterm=bold
Но это просто приводит к тому, что отметки времени выделяются жирным шрифтом без всякого зеленого цвета.
Тогда я подумал, что, возможно, мне нужносообщать каждому синтаксису, где останавливать или начинать сопоставление, например, так:
syntax match timestampline "\[ \([0-9]\{2}\:\)\{2}[0-9]\{2} [0-9]\{8} \]\{-}\zs.*$"
highlight timestampline ctermfg=green ctermbg=NONE
syntax match timestamponly "\[ \([0-9]\{2}\:\)\{2}[0-9]\{2} [0-9]\{8} \]\ze"
highlight timestamponly ctermfg=green ctermbg=NONE cterm=bold
Но это просто приводит к тому, что метки времени становятся зелеными и жирными, а все остальное не форматируется.
Я непонимаю, что я делаю не так.Почему вторые основные утверждения полностью отрицают первые?Разве они не должны просто форматировать то, что им соответствует, и не влиять на то, что им не соответствует?