2011-09-08 5 views
5

Vimからのcscopeクエリの出力をgrepする方法を探しています。Vim内のcscope出力をフィルタリングする方法

以下が私のために動作しませんでした:

:cs f s symbol !grep pattern 

それは与えた:

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

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

答えて

6

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

redir @c 
cs f s symbol 
redir END 

これで、cレジスタをファイルに入れてフィルタリングすることができます。

私はcscope(それはすべてquickfixにあります)からの出力はあまり得られませんが、これはあなたが何を記述しているかを示します。一般的に


、あなたは|(バー)と(:help :!cmdを参照)シェルコマンドをフィルタリングすることができます。

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

しかし、元のコマンドは、コマンドセパレータとしてバーを解釈する(あなたは1に複数のコマンドを置くことができます行):

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

私はあなたがわきredirを使用してから、元のコマンドの出力をフィルタリングすることができるとは思いません。しかし、Benoitの答えを使ってquickfixをフィルタリングすることができます。ここで

0

はQuickFixリストをフィルタリングするために私の関数やマクロです:

使用法:

  • _qf_qF_qp_qPは、ダイアログプロンプト
  • を開きますあなたにVimのパターンを入力しますそのダイアログプロンプト
  • _qf_qFは、ファイル名には、_qp a nd _qP on line contents
  • 大文字のバージョンには: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> 
+0

は私のために動作しませんでした。私は ':set cscopequickfix = s-、c-、d-、i-、t-、e-、a-'も持っています。実際には ':call FilterQFList'でこの関数を呼び出すことができますが、キーマッピングは機能しません。私はcscopeで何かを検索する前に、このマッピングが通常モードで動作できることを意味します。また、私は '巨大な '機能で私のヴィムを構築する。 – VicX

関連する問題