Подсветка лога резьбового приложения - PullRequest
2 голосов
/ 10 апреля 2011

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

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

  1. Выделите все строки с тем же идентификатором потока, что и текущая строка.

  2. Если нажать какое-либо нажатие клавиши, все строки с другим идентификатором потока будут свернуты, при повторном нажатии клавиши будет развернута строка.

Скелет для обоих предметов приветствуется.

Ответы [ 2 ]

4 голосов
/ 15 апреля 2011

Подсветка по шаблону

Здесь есть функция, чтобы выделить (и еще одну, чтобы очистить) все строки, которые содержат данный шаблон, с выделением акцента на самом шаблоне.Регистр "последнего поиска" @/ также установлен на запрошенный шаблон, поэтому n / N в обычном режиме переходит вперед / назад по соответствующим линиям.<Leader>l (эквивалентно \l в большинстве установок) - это ярлык для выделения строк, которые содержат WORD под вашим курсором.

highlight def link xHiLine Special
highlight def link xHiPatt String

function! ClearHighlight()
    syn clear xHiLine
    syn clear xHiPatt
    let @/ = ''
endfunction

function! HighlightPattern(patt)
    call ClearHighlight()
    if a:patt != ''
        echo "Highlighting pattern: ".a:patt
        exec "syn match xHiPatt \"".a:patt."\" contained"
        exec "syn match xHiLine \".*".a:patt.".*\" contains=xHiPatt"
        let @/ = a:patt
    endif
endfunction

map <Leader>l :call HighlightPattern(expand("<cWORD>"))<CR>
map <Leader>c :call ClearHighlight()<CR>

Складывание по шаблону

Пример свертывания на основе рисунков можно найти в подключаемом модуле Show-Hide Vim .Он предоставляет две команды, SHOW и HIDE, и несколько быстрых карт.Например, :SHOW thread=1234 свернет все строки, кроме тех, которые содержат thread=1234, в то время как zs в обычном режиме покажет строки, содержащие word под вашим курсором.[Возможно, вы захотите создать альтернативную карту, например zS, для использования <cWORD> вместо <cword>.]

Шаблоны зданий

Если ни <cword>, ни <cWORD> не извлекают достаточно уникальный шаблон фильтра (или чтобы избежать перемещения курсора в соответствующее поле), создайте другую функцию, подобную приведенной ниже, и вызовите ее с карты.

function! GetField(num)
    let toks = split(getline('.'))
    if len(toks) >= a:num
        return toks[a:num-1]
    endif
    return ''
endfunction

map <Leader>hl :call HighlightPattern(GetField(3))<CR>
map <Leader>fl :exec "SHOW ".GetField(3)<CR>
1 голос
/ 10 апреля 2011

То, что вы в основном ищете, это внешний механизм, который будет построен поверх вашего файла журнала. Chainsaw делает именно это для журналов на основе log4j: http://logging.apache.org/chainsaw/index.html

Не знаю, какое у вас приложение для ведения журналов, но вам, вероятно, стоит взглянуть в этом направлении.

...