2009-09-22 7 views
77

VIMのみを使用して大きなプロジェクト(何百ものファイル)を管理するにはどうすればよいですか?VIMで大きなプロジェクトをナビゲートする方法

私は個人的には小さなプロジェクトよりも大きな問題を抱えています。

  • 「名前をつけて」ファイルにすばやくアクセスする方法はありますか?それは別のファイルにある場合には、「クラス定義に行く」の同じ

私はちょっと、すべてのVIMの基本を知っているので、私が書いたスクリプトやクイック編集いくつかのソースコードのためにそれを使用して問題はありません。 。しかし、私はファイル間を移動する必要があるとき、私にとって本当に面倒です。

+0

あなたはどの言語を使用していますか? – LB40

+0

言語にとらわれないソリューションが好きですが、C++、PHP、Railsのサポートが必要です。 –

答えて

29

VIMはタグをサポートしています。プロジェクト用のタグファイルを作成したら、同じ編集セッション内のすべてのファイルにジャンプするなど、メソッドやクラスなどの定義や宣言にジャンプすることができます。

(私はあなたのシステムが* nixの/ Cygwinのであると仮定しています)あなたのシェルプロンプトに移動し、C/C++用のタグファイルを生成するには

:help tags 

を試してみて、

info ctags 

を入力しますか、

ctags --help 
+2

Vimはcscopeもサポートしています。これは、どの関数が特定の関数を呼び出すかを見つけるのに役立ちます。情報については ':help cscope'を参照してください。はじめに(「これに似た質問に答えるように設計されています」の下に)素晴らしい機能リストがあります。 – Cascabel

+1

残念ながら、cscopeはC++に関する非常に限られた知識しか持っていません。 –

12

は私がNERDTree(ディレクトリのサイドバー)、FuzzyFinder Textmate(の組み合わせを使用して行くtoファイルのTextMateのようなCMD + T)、およびセッション(:hセッション)を使用して、大規模なプロジェクトに対処してください。

いくつかのセッションヘルパープラグインの使用をお勧めします。私が使っていることについて言及しますが、私はまだそれに満足していません。ちょうどGoogleの "vimのセッション"。

FuzzyFinder Textmateを動作させる際に注意する点は、古いバージョンのFuzzyFinderプラグイン、特にv2.16に依存することです。何か高いとあなたがエラーを取得します。しかし、それは間違いなく問題の価値がある。名前の補完はありませんが、検索はスマートです。fro/time/actionsphpを検索すると、ファイルapps/(fro)ntend/modules/(time)_tracking/actions/(actions).class.(php)(括弧は一致するものを示します)をプルアップします。これにより、フォルダ名で一意のファイルだけを選択するのが非常に簡単になります。

+2

私は新しいプラグインを見つけましたが、セットアップが簡単です(少なくとも私の場合):[CommandT](https://wincent.com/products/command-t)。はるかに高速。 – donut

+6

新しい、より強力なツール、vimスクリプトの作者なので、外部依存関係は[janusプロジェクト]で使用される[ctrlp](http://www.vim.org/scripts/script.php?script_id=3736)ではありません。 –

1

誰かがより良い解決策を指摘して何かを学ぼうと思っていますが、NERDTreeはツリーを拡張している限り、特定のファイルに名前の補完をしてくれて良かったです。検索モードに入るための

、D/foo.pyo(foo.pyがファイル名です)

、ツリーを開くためにD、/:私は、ファイルを取得する必要があるコマンドのようなものです、ファイルの名前(または部分的な名前、正規表現など)、次にoを開きます。

もちろん、ファイル名を十分に入力しなかったり、重複している場合は、「n」を数回押す必要があります。

NERDTreeを使って、これまでのように私の筋肉の記憶には達していますが、それについて考えることさえできません。もちろん

私ものctagsを使用していますが、カーソルに近い機能を持っており、別のファイルか何かでその定義を取得する必要がある場合、それらにのみ有用です。多くの場合、「OK、私は今、feature xで作業する必要がある」と言い、ctagsが本当に役立つと思われる近くに別のファイルに移動する必要があります。

+3

私はそれをもう少し見て、ファジーファインダはプロジェクト検索のための素晴らしいアイデアのように見えます。 – gravitation

1

私は私の2つのプラグインを使用しています:

コマンドラインでファイル名を完了
  • searchInRuntime。完全に実験的かつ文書化されていないです
  • lh-tags FuzzyFinderにとlookupfileする何とか似ています。ファイル保存時のタグファイルの自動更新とクイックアップデート、およびデフォルトで<c-w><m-down>に接続されたタグセレクタの2つの機能があります。代わりに、有名なタグリストプラグインをチェックしたいかもしれません。

の両方が私のVIMLライブラリLH-VIM-libが必要です。

7

貴重なctagsおよびさまざまな関連コマンド。私はproject pluginがなくても生きていけませんでした。興味のあるファイルを別のペインにプロジェクトに関連付けることができます。私はカスタマイズされているか、私のセットアップのあまり覚えていないことができますが、私はDebug.cと呼ばれるソースファイルを開きたい場合は、私がヒット:

<F12>  " Opens the project pane 
/De  " Searches for "De", which is likely to be enough to find Debug.c or possibly Debug.h 
<ENTER> " Opens the selected file and closes the project pane 

私は頻繁にして実行します。

:vsp  " Vertically split the window 
<F12>  " Reopen project pane 
#   " Search back to find previous entry with the same name (to find 
      Debug.h if I was on Debug.c: my headers are in Headers/ and 
      my source is in Source/, so the headers come earlier in the list 
      than the source). I use * to go the other way, obviously. 
<ENTER> " Open the header file in the other window and close the project window. 

付きこの比較的短いシーケンス、私は任意のファイルを開くことができ、それは垂直分割のヘッダーです。プロジェクトのプラグインウィンドウは単なるテキストファイルなので、Vimの検索機能を使用して完成します。

3

あなたは他のポスターとしてのctagsを使用している場合は、taglistプラグインを見て確認して、その後、推奨しています。

時間をかけてドキュメントを読んで、キーバインディングを学んでください。ここではいくつかのあなたは(TListの窓から)始めるにされています

  • O - 新しいウィンドウで開いているファイル
  • トン - 新しいタブで開いているファイル
  • は、[[またはバックスペース - リスト内の前のファイル
  • ]]またはタブ - リスト内の次のファイル
0

SourceCodeObedineceを試してみてください。これは私がC++ 1Gbソースファイルプロジェクトを扱うために開発したものです。
0scanとペアで使用します。

これらの2つのプラグインは、最も一般的なVimブラウジングツールのラッパーで、ctagscscopeです。

+0

C++コードではうまくいきますが、cscopeはC++で正しく動作しません –

2

私はFindFileを使用します。プロジェクトのルートにvimを開き、:FC .を実行すると、プラグインはcwdの下にあるすべてのファイル名をキャッシュします。 :FFを実行して補完メニューを開き、必要なファイルの名前(または最初の数文字)を入力します。

+0

これは最も簡単なプラグインのようなものです。ゼロ設定が含まれています.. あなたのルートディレクトリに 'FC .'だけがあり、':FF'と入力すると、あなたが望むファイル名を入力すると完了です。私はまだ新しいタブで起動する方法を見つけ出そうとしています。 – tester

+0

これを使うとvimを起動するたびに、そのディレクトリのファイルをキャッシュするために ':FC .'をやり直す必要があります。 – tester

+0

これは、 ':FT'や':FindTabNew'を使ってFindFile.vimを更新したものです。https://gist.github.com/1104884 – tester

2

Exuberant ctags。

[Ctrl]キーを押すと、カーソルの下のタグにジャンプします。

22

は、私はシンプルなソリューションが好き、現時点でナビゲートする私のお気に入りの方法は次のとおりです。

は、(現在の作業ディレクトリ内の任意の場所にファイルを見つけるために、次にエディタでこれを入力する~/.vimrc.local

set path=$PWD/** 

に追加しますPWD)

:find user_spec.rb 

あなたはこのTextMateは非常に満足して変換すること、同様に複数の選択肢を見つけるために、ファイル名のタブ補完を使用することができます。

+1

この解決法は以下のより簡単です:FCとプラグインのキャッシュが不要です。あなたは私の日のアボカドを作った!ありがとう! – Srikumar

+0

Vimはデフォルトのディレクトリとしてwdを読み込んでいません。シェルを再起動してもまだ動作しません。また、コマンドを実行する前に '' vim .''を試してみてください:/ –

4

Vim 7.3から、:findコマンドにはファイル名のタブ補完があります。など

あなたは(おそらく再帰的にサブディレクトリを検索できるように**ワイルドカードを使用して)プロジェクト全体を含むようにあなたの'path'オプションを設定するのであれば、あなたは:findを使用することができ、:sfind:tabfindは、任意のファイルを取得するために完了してコマンドあなたのプロジェクトで。これにより、インクルードディレクティブのように、ファイル名がテキストに含まれている場合は、gfとお友達と直接ファイルにジャンプすることもできます。

この方法では、特定のファイルをナビゲートするための外部ツールやプラグインは必要ありません。しかし、それは明らかに使用するのが速くて簡単ではないかもしれませんが、定義に飛び込む必要はありません。定義については、他の回答が示唆するように、私はcタグを使用します。

1

ソース・ファイルのルートからオープニングvim、そこにすべてのサブディレクトリを含めるpathオプションを拡張します。
たとえば、C++ヘッダーの場合はset path+=/usr/include/c++/**、ソースディレクトリの場合はset path+=**です。

この場合、次のような可能性が広がります。

1)オープニング名前のファイルまたはその一部

:find file_name 

あなたは確実に:findで自動補完とワイルドカード拡張を使用することができます。これは言語にとらわれません。 cusror下のファイルへの移動

2):
あなたは#include "project/path/classA.hのようなファイルパスを移動する場合。

gf or gF - go to file under cursor. 

Ctrlキー - からgfまたはgFまた

gd - go to definition for word under cursor within the file. 

言語に依存しないの後に戻って最後のカーソル位置に来ます。

3)APIの検索およびAPIの場所

[iまたは[Iに移動、ワークスペースを離れることなく、カーソルの下の単語のためのあなたの関数のシグネチャをルックアップするために使用することができます。実際に宣言に行くには[<Tab>Ctrl - を使用して最後の位置に戻ります。


pathを延長しなければ、:Exコマンドでファイルをナビゲートを開始し、ナビゲートして、ファイルを開くことができます。私はこれよりもNerdTreeを好む。

関連する問題