2011-07-13 10 views
7

出力をcscopeからVim quickfixウィンドウにリダイレクトしたい。接着剤部分は十分に簡単ですが、私は現在errorformatで固執しています。これがfoo()内を意味Vim Quickfixウィンドウにcscope出力を入れる方法は?

Format: "filename scope linenumber sourceline" 
Example: "abc.cpp foo 25 bar()" 

abc.cppにおけるライン25のバーの呼び出しは()があり、:ここではcscopeの出力からの例(cscopeの-L -1バー)があります。

efm = %f\ %*[^\ ]\ %l\ %mが機能しますが、範囲情報が失われます。たとえば:

Input: "abc.cpp foo 25 bar()" becomes 
Output: "abc.cpp |25| bar() inside foo()" 

唯一のエラーフォーマットでこれを行うことは可能ですか私はスクリプトを記述する必要があります:

Input: "abc.cpp foo 25 bar()" becomes 
Output: "abc.cpp |25| bar()" 

私が欲しいのは、このようなクイックフィックスウィンドウでスコープを含めることですVimに出力する前に出力を操作するには?

+0

これは役に立つかもしれませんので、私はここに入れておきます:プログラムの出力をVim quickfixに接続することができます':cex'。たとえば: 'csc system(" cscope -L -1 "。expand(" "))'と入力します。個人的には、C++コードの静的解析にcppcheckとvera ++でこれを使用します。 –

答えて

8

errorformatを使いこなす代わりに、cscopequickfixと設定し、通常の:cscopeコマンドを使用してください。例えば。 (vimのヘルプから)

:set cscopequickfix=s-,c-,d-,i-,t-,e- 

編集

ます。また、その後efm

を使用し、

sed -e 's/^\([^ ]\+\) \([^ ]\+\) \([^ ]\+\) \(.*\)$/\1 \3 \4 inside \2/' 

があなたのメッセージをフィルタリングするように設定フィールドの順序を変更するには、以下のようにフィルタを使用することができます

errorformat=%f\ %l\ %m 
+0

ありがとう、私は前にcscopequickfixについて知りませんでした。これはうまく動作するようですので、あなたのためにupvote。しかし、これはまだ出力をerrorformatと照合することについて私の質問に答えていません。それは内蔵されていない他のプログラムの出力を接続するのに役立ちます。 –

+0

@ThanhDK:あなたが望むことをするために小さなフィルタスクリプトを追加しました。メッセージがフォーマット文字列 – Hasturkun

+1

に適合しない場合にvimヘルプが示唆しているのは、cscopequifixを使用するためにquickfixモジュールを無効にする必要があります。あなたの答えを追加する他の時間を節約するplz。 – MaikoID

関連する問題