5

cscopeVim から のクエリの出力を grep する方法を探しています。

以下は私にとってはうまくいきませんでした:

:cs f s symbol !grep pattern

それは与えました:

E259: no matches found for cscope query s symbol !grep pattern ...

PS:
私はその方法を知ってい ます。Unix コマンドを介して ex コマンドの出力redirをフィルタリングする簡単な方法を探しています。

4

2 に答える 2

6

:redirメッセージ出力をレジスタまたはファイルに送信するために使用できます。

redir @c
cs f s symbol
redir END

これで、レジスターをファイルに入れてcフィルター処理できるようになりました。

私は cscope から多くの出力を得ることはありません (すべてクイックフィックスにあります) が、それはあなたが説明していることを実行します。


一般に、 (bar)を使用してシェル コマンド (「 」を参照:help :!cmd) をフィルタリングできます。|

:!echo 0updateView | cscope -dl | grep global

しかし、ex コマンドは bar をコマンド区切りとして解釈します (そのため、1 行に複数のコマンドを入れることができます):

:if &ft != 'help' | silent! cd %:p:h | endif

を使用する以外に、 ex コマンドの出力をフィルタリングできるとは思いませんredir。ただし、Benoit の回答を使用してクイックフィックスをフィルター処理できます。

于 2011-09-09T04:39:37.313 に答える
0

クイックフィックスリストをフィルタリングするための関数とマクロは次のとおりです。

使用法:

  • _qf_qF_qpおよび_qPダイアログ プロンプトが開きます
  • そのダイアログプロンプトにVimパターンを入力します
  • _qfファイル名と行の内容で_qFフィルタリングします_qp_qP
  • 大文字のバージョンには:v効果があり (行が一致しないようにします)、通常のバージョンは行をパターンに一致させます。
  • を使用する:colder:cnewer、結果が満足できない場合に、古いクイックフィックス リストと新しいクイックフィックス リストをジャンプできます。これらのコマンドを呼び出すためのマッピングもあります。

コード:

" Filter Quickfix list
function! FilterQFList(type, action, pattern)
    let s:curList = getqflist()
    let s:newList = []
    for item in s:curList
        if a:type == 'f'     " filter on file names
            let s:cmpPat = bufname(item.bufnr)
        elseif a:type == 'p' " filter on line content (pattern)
            let s:cmpPat = item.text . item.pattern
        endif
        if item.valid
            if a:action == '-'
                " Delete matching lines
                if s:cmpPat !~ a:pattern
                    let s:newList += [item]
                endif
            elseif a:action == '+'
                " Keep matching lines
                if s:cmpPat =~ a:pattern
                    let s:newList += [item]
                endif
            endif
        endif
    endfor
    " Assing as new quickfix list
    call setqflist(s:newList)
endfunction

nnoremap _qF            :call FilterQFList('f', '-', inputdialog('Delete from quickfix files matching: ', ''))<CR>
nnoremap _qf            :call FilterQFList('f', '+', inputdialog('Keep only quickfix files matching: ', ''))<CR>
nnoremap _qP            :call FilterQFList('p', '-', inputdialog('Delete from quickfix lines matching: ', ''))<CR>
nnoremap _qp            :call FilterQFList('p', '+', inputdialog('Keep only quickfix lines matching: ', ''))<CR>
于 2011-09-09T08:19:14.740 に答える