2

マルチスレッドアプリケーションのログファイルがあります。各行にはよく知られている形式があります(たとえば、3番目のフィールドはスレッドIDです)。フィールドの1つはスレッドIDです。私は車輪の再発明を試みていないことを願っています:)

とにかく、ファイルを読みやすくするために、私は役立つ2つのオプションを考えました。

  1. 現在の行と同じスレッドIDを持つすべての行を強調表示します。

  2. いくつかのキーストロークを押すと、他のスレッドIDを持つすべての行が折りたたまれ、もう一度キーストロークを押すと行が展開されます。

両方のアイテムのスケルトンを歓迎します。

4

2 に答える 2

4

パターンによるハイライト

これは、特定のパターンを含むすべての行を強調表示する(および別の行をクリアする)関数であり、パターン自体にアクセントが強調表示されます。「最後の検索」レジスタ@/も要求されたパターンに設定されるため、通常モードでは、 n/Nは一致する行を前後にジャンプします。 (ほとんどのインストールで<Leader>l同等)は、カーソルの下を含む行を強調表示するためのショートカットです。\lWORD

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-HideVimプラグインを確認してください。2つのコマンド、、、およびいくつかのショートカットマップを提供しSHOWますHIDE。たとえば、は、:SHOW thread=1234を含む行を除くすべての行を折りますが、通常モードでは、カーソルの下に下を含む行が表示されます。[の代わりに使用する、などの代替マップを作成することをお勧めします。]thread=1234zswordzS<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>
于 2011-04-15T18:59:09.093 に答える
1

基本的に探しているのは、ログファイルの上に構築される外部メカニズムです。チェーンソーは、log4jベースのログに対してまさにそれを実行しています:http: //logging.apache.org/chainsaw/index.html

ロギングアプリケーションが何であるかはわかりませんが、おそらくその方向を確認する必要があります。

于 2011-04-10T16:49:40.100 に答える