2015-01-15 3 views
2

у меня есть файлы, которые имеют следующий вид входа:ВИМ: пользовательские подсветка для лог-файлов

YYYY-MM-DD HH:MM:SS.sss SEVERITY [thread.name] class.name:line -

суровость один из DEBUG, INFO, WARN или ERROR.

У меня есть файл синтаксиса, который уникально выделяет временную метку и каждую из разных степеней. Теперь, однако, я хочу выделить имя потока, имя класса и номер строки. проблема заключается в том, что в сообщениях журнала могут быть квадратные скобки, поэтому просто начиная с +\[+ и заканчивая на +\]+, это не сработает.

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

:syn region logTime start=+^\d\{4}-\d\{2}-\d\{2} \d\{2}:\d\{2}:\d\{2}+ end=+ +me=e-1 
:syn region logError start=+ERROR+ end=+ +me=e-1 
:syn region logWarn start=+WARN+ end=+ +me=e-1 
:syn region logInfo start=+INFO+ end=+ +me=e-1 
:syn region logDebug start=+DEBUG+ end=+ +me=e-1 

hi def logError ctermfg=white ctermbg=red 
hi def logWarn ctermfg=yellow 
hi def logInfo ctermfg=green 
hi def logDebug ctermfg=blue 
hi def logTime ctermfg=white ctermbg=blue 
+0

Я бы предложил прочитать более поздние главы [this.] (Http://learnvimscriptthehardway.stevelosh.com/) Кроме того, я думаю, было бы лучше, если бы вы использовали «hi link», чтобы цветовые схемы имели бы контроль над вашими цветами. Например, «hi link logError Error» – EvergreenTree

+0

вы можете объяснить, как работает «hi link»? Если я не скажу, какой цвет для пользователя, как он узнает? – ewok

+0

Привет, ссылка просто связывает синтаксис highlgihting group с уже существующей группой. По умолчанию у Vim их много, которые можно перечислить, просто введя команду выделения без каких-либо аргументов. – EvergreenTree

ответ

3

Во-первых, вы перерасхода в :syntax region; (! И быстрее) для важностей, гораздо проще :syn keyword достаточно:

:syn keyword logInfo INFO 

Как имя нить приходит после тяжести (после пробела), вы можете указать Vim специально пытаться разобрать те впоследствии:

:syn keyword logInfo INFO skipwhite nextgroup=logThreadName 

Чтобы избежать этого, в квадратных скобках имя нить разбирается в другом месте, указать contained параметр:

:syn match logThreadName "\[\S\+\]" contained 

Опять же, :syn match проще, чем регион.

+0

Спасибо! для имени класса и номера строки, будет ли это то же самое? могу ли я использовать ': syn match logThreadName" \ [\ S \ + \] ", содержащий nextgroup = logClassName', а затем': syn match logClassName "\ S \ +: \ d \ +" '? – ewok

+1

Да, вы можете их цепью; не забывайте, что 'skipwhite', хотя! –

Смежные вопросы