2016-04-14 9 views
0

linuxの下で何かしたいときにヘッダファイルの間を移動するのはカジュアルだった。そして、私が何かの定義を見つけたいと思ったら、例えば、struct sockaddr_storage。私が今やっていることは:!find /usr/include/ -type f | xargs grep " struct sockaddr "です。それは強力ですが、私には説得力がありません。/usr/include/filesの周りをナビゲートするときにVimを使用して定義を見つける

他のIDE(VStudioなど)のような.hファイルを簡単にナビゲートする方法がありますか? (ほぼC/CPPユーザーです)ctagsとcscopeまたはtagbarはプロジェクト用ですが、この状況で私に利益をもたらすことはできますか?あなたが必要なもの

+0

はい、ctagsとcscopeは、/ usr/includeのファイル間で実行できます。あなたが再帰的なバージョンを持っていて、合格すれば、ctagsは100メグ以上のタグを生成する可能性があります。それは圧倒的なものになるでしょう。倍数が増える可能性がありますが、あなたは何かを見つけることができます。 vimの重複リストセレクタに飽きた場合は、ctagsに渡されるファイルリストを細分化することができます。 –

+0

FWIW、Vimは決してIDEではなかったし、そうでない、そして決してIDEではないだろう。 IDEからVimへの移行を円滑に進めるには、現実を受け入れる必要があります。つまり、Vimは*たくさんの*を持っており、組み込み機能の多くはC言語を念頭に置いて設計されています。 – romainl

答えて

5

タグツールです。そのために、多くのオプションを使用しています:

:help 'path' 
:help 'include' 
:help 'define' 

全体のメカニズムについては、:help include-searchで説明しています。あなたのケースでは

、そしてあなたがどうなる現在のバッファで#include <sys/socket.h>を、持っていると仮定すると:

:ijump sockaddr_storage 

か:

:isplit sockaddr_storage 

か:

:isp /socka 

やプレスを[Iカーソルはsockaddr_storageです。

、Cのためのdefineオプションのデフォルト値が#defineに限定されているが、structintのようなものを含むように拡張することができますなどあなたのような何かを行うことができます

:set define=^\\s*#*\\s*\\(define\\\|struct\\) 

:dlist sockaddr_storage 

代わりに、ctags:help ctags)、gnu global、またはcscopeのようなコードインデクサーを使用することは明らかです:help cscope)を使用して、プロジェクト/usr/include/の両方にインデックスを付けます。

+0

こんにちは、仲間のスタックオーバーフローファン、devoxx frでお会いしますか?私は私たちのためにチャットルームを作った:http://chat.stackoverflow.com/rooms/info/109630/devoxx-fr – janos

+0

@janos、joined。 – romainl

1

はVimがインクルードファイルをたどり、それらが定義されているシンボルを見つけることができるようなctagsgtags

関連する問題