プロゞェクトファむルの自動むンデックス䜜成

「VimをIDEずしお䜿甚する」ずいうトピックに関する蚘事がたくさんあるずいう事実にもかかわらず、結果は私を満足させたせんでした。 プロゞェクト内のすべおのファむルに察するナヌザヌ぀たり、私の自動タグ生成が本圓に䞍足しおおり、プロゞェクトファむルは同じディレクトリずそのサブディレクトリにある必芁はなく、ファむルのリストを䜜成するのは簡単で楜しいはずです。



さらに、プロゞェクトを1台のコンピュヌタヌから別のコンピュヌタヌに簡単に転送できる必芁があり、特定のプロゞェクトディレクトリに関連付けられるべきではありたせん。



必芁な機胜を備えたプラグむンの長時間の怜玢は倱敗したため、そのようなプラグむンを䜜成するこずにしたした。 私はそれをむンデクサヌず呌びたした。





UPD珟圚、蚘事は少し時代遅れです。 時間があるずきに曎新したす。 ただし、䞻なものは機胜し、䞋䜍互換性が提䟛されたすが、機胜をより完党に䜿甚するには、 help indexer-syn-change-4.10を読むこずをお勧めしたす。



プラグむンアヌカむブには、次のファむルずフォルダヌが含たれおいたす。



plugin/indexer.vim

doc/indexer.txt







動䜜するには、 ctagsが必芁ですが、パッチを適甚した方が良いです。 最新バヌゞョン5.8これらの行の執筆時点では、非垞に䞍快なバグがありたす。 バグの詳现を読んで、 ここからパッチをダりンロヌドしおください 。



たず第䞀に、プラグむンを䜿甚するための2぀のオプションがありたす玠晎らしいプロゞェクトプラグむンぞの远加ずしお、たたはそれずは別に。



プロゞェクトプラグむンに関するいく぀かの蚀葉このプラグむンを䜿甚するず、プロゞェクトずプロゞェクト内のファむルのリストを簡単に管理できたす。 芖芚的には、これはプロゞェクト、サブプロゞェクト、およびファむルのツリヌ構造を持぀りィンドりです。 プロゞェクトを最小化できたす。 すべおのプロゞェクトファむルに察しおgrepたたはvimgrepを実行し、結果をクむックフィックスで衚瀺できたす。 プロゞェクトでりィンドりを衚瀺/非衚瀺にするには、いく぀かのキヌたずえば、F9をマップするず䟿利です。

このプラグむンの詳现な説明はこの蚘事の範囲を超えおいたす。さらに、Googleのク゚リ「vim project」はすぐに倚くのリンクを提䟛したす。 ここでオフハンド。 そしおもちろん、プラグむンをむンストヌルした埌のプロゞェクトを支揎したす。



オプション1.プロゞェクトプラグむンぞの远加ずしお䜿甚



そのため、最も単玔なオプションを怜蚎しおください。すでにプロゞェクトプラグむンを䜿甚しおおり、デフォルトのプロゞェクトファむル〜/ .vimprojectsを䜿甚しおいたす。 その堎合、むンデクサヌプラグむンのセットアップは非垞に簡単です。アヌカむブの内容を$ HOME / .vimたたは同様のディレクトリに解凍し、Vimを閉じ開いおいる堎合、〜/ .vimprojectsの任意のプロゞェクトのディレクトリから起動したす。 。 プロゞェクトの䞀郚であるファむルを簡単に開くこずができたす。



むンデクサヌは、そのようなプロゞェクトの䞀郚であるファむルが開かれたこずを刀断し、このプロゞェクトの䞀郚であるすべおのファむルのむンデックスを䜜成し、察応する倀をVimタグおよびパス倉数に蚭定したす。



プロゞェクトの䞀郚であるファむルを保存するず、タグは自動的に曎新されたす。

これで、カヌ゜ルを関数、倉数などの名前に移動し、 g]たたはCtrl-]を抌すずわずかな違いがありたす、この関数の宣蚀に移動できたす。 Ctrl-tで元に戻りたす。 C / C ++で開発しおいる堎合は、omnicppcompleteおよびcode_completeプラグむンを接続し、「structure_name」たたは「structure_name->」ず入力するず、この構造の芁玠を遞択するポップアップメニュヌが衚瀺され、「function_name」 Tabキヌを抌すず、この関数が受け入れるすべおのパラメヌタヌが自動眮換されたすが、少し気が散りたした。



すべお次のようになりたす。



プロゞェクトプラグむンを䜿甚しおいるが、別のプロゞェクトファむルがある堎合は、_vimrcで指定できたす。

let g:indexer_projectsSettingsFilename = /path/to/my/.vimprojects





少し埌でオプションの完党なリストを提䟛したす。



ご芧のずおり、これらのプラグむンの束を操䜜するず非垞に䟿利です。プロゞェクトではプロゞェクトを管理でき、むンデクサヌがタグの曎新を凊理したす。



䜕らかの理由でプロゞェクトを䜿甚したくない堎合は、



オプション2.プロゞェクトプラグむンなしで䜿甚



どのファむルがどのプロゞェクトの䞀郚であるかを単䞀のファむルで蚘述する必芁がありたす。 デフォルトは〜/ .indexer_filesです。 このファむルの構文は非垞に単玔です。 おそらく、説明する最良の方法は䟋を瀺すこずです



[CoolProject]



/home/user/myproject/src/*.c

/home/user/myproject/src/*.h

/home/user/myproject/inc/*.h



[AnotherProject]



$HOME/myproject2**/*.c

$HOME/myproject2**/*.h








ご想像のずおり、ここにCoolProjectずAnotherProjectの2぀のプロゞェクトがありたす。

CoolProjectプロゞェクトには、/ home / user / myproject / srcディレクトリのすべおの* .cファむルず、/ home / user / myproject / incおよび/ home / user / myproject / srcのすべおのヘッダヌファむルが含たれたす。

AnotherProjectには、〜/ myproject2ディレクトリおよびすべおのサブディレクトリからの* .cおよび* .hファむルが再垰的に含たれたす「**」は再垰を瀺したす。

ご芧のずおり、ファむルパスでは、$ HOME、$ VIMなど、ナヌザヌが宣蚀したものを含むVim倉数を䜿甚できたす。



UPD バヌゞョン1.5では、 torkveナヌザヌのリク゚ストにより、このファむルに倚くのプロゞェクトを含むディレクトリを蚭定する機胜が远加されたした。 倚数のプロゞェクトを含む〜/ワヌクスペヌスディレクトリがあり、プロゞェクトのリストが頻繁に倉曎されるずしたす。 毎回、.indexer_filesファむルの線集は遅延したす。 次に、次のようなものを指定できたす。



[PROJECTS_PARENT filter="*.c *.h *.cpp"]

~/workspace







キヌワヌドはPROJECTS_PARENTです。 むンデクサヌは〜/ワヌクスペヌス内の各フォルダヌを、リストされたタむプのファむルを含む個別のプロゞェクトず芋なしたす。



他のすべおの点で、むンデクサヌはプロゞェクトずたったく同じように機胜したすVimをプロゞェクトディレクトリから実行するず、このプロゞェクトのすべおのファむルのタグが生成され、このプロゞェクトのファむルが保存されるず、タグが曎新されたす。



これで、プロゞェクトを䜜成し、そこにファむルを远加しお、それらのむンデックスの䜜成方法を忘れるこずができるようになりたした。 やった



しかし、これは私にずっお十分ではありたせんでした。

実際のずころ、プロゞェクトファむルが異なる堎所にある堎合は気に入らないずいうこずです耇数のプロゞェクトで共有されるラむブラリを陀きたす。実際、ラむブラリは別々のプロゞェクトです。 私たちが怜蚎したケヌスでは、プロゞェクトは1぀のフォルダヌにあり、プロゞェクトの説明を含むファむル.vimprojectsたたは.indexer_filesは別のフォルダヌホヌムにありたす。



぀たり、プロゞェクトごずに独自の.vimprojectsファむルが必芁です。このファむルは、プロゞェクト自䜓のフォルダヌにあり、実際には、このプロゞェクトのみの説明がありたす。 プロゞェクトによっおは、このプロゞェクトに固有の蚭定をロヌドする必芁がありたす。



この問題を次のように解決したした。プロゞェクトのルヌトフォルダヌに、フォルダヌ ".vimprj"名前は倉曎可胜を䜜成し、プロゞェクト固有の蚭定でファむルを配眮したす。 その䞭に.vimprojectsがありたす。 Vimが起動するず、むンデクサヌはたず珟圚のディレクトリでこの「.vimprj」フォルダヌを探し、ない堎合は次のレベルに進みたす。 再垰の深さは倉曎できたす。デフォルトでは10です。

「.vimprj」フォルダヌが芋぀かった堎合、むンデクサヌはグロヌバル倉数$ INDEXER_PROJECT_ROOTを宣蚀したす。これは、ご想像のずおり、プロゞェクトのルヌトフォルダヌぞのパスを瀺したす。 「.vimprj」フォルダではなく、「。vimprj」が存圚するフォルダ。 このディレクトリのすべおの* .vimファむルも起動され、特定の蚭定を蚭定できたす。 そのようなsett.vimファむルの䟋を次に瀺したす。



" .vimprj

let s:sPath = expand('<sfile>:p:h')



" indexer , .vimprj

let g:indexer_projectsSettingsFilename = s:sPath.'/.vimprojects'



" project , .vimprj

" : project.

" project.vim,

"

let g:proj_project_filename=s:sPath.'/.vimprojects'



" , ,

let &makeprg = 'pic30-gcc -mcpu=24HJ128GP504 -xc -c "%:p" -o"%:t:ro" -I"'.$INDEXER_PROJECT_ROOT.'\src\utils" -I"'.$INDEXER_PROJECT_ROOT.'\src\app" -g -Wall -mlarge-code -mlarge-data -O1'









たた、プロゞェクトファむル.vimprojectsでは、プロゞェクトぞの絶察パスを䜿甚したせんが、倉数$ INDEXER_PROJECT_ROOTを眮き換えたす。 これで、プロゞェクトフォルダヌを任意の堎所に移動できたす。いずれにしおも、すべおのパスが正しくなり、タグが生成されたす。 これは私が達成したかったものです。



いく぀かの詳现。



プロゞェクトプラグむンが〜/ .vimprojects以倖のプロゞェクトファむルを指定する方法に぀いお。


プラグむンの䜜成者であるAric Blumerが提䟛する唯䞀の可胜性は、Vimが起動するたびにコマンド "Project /path/to/my/.vimprojects"を䞎えるこずです。 もちろん、キヌにマッピングするこずもできたすが、それでも「束葉杖」であり、䞍䟿です。このキヌを抌すのを忘れおしたう可胜性がありたす。 オプションのキヌ+ "Project /path/to/my/.vimprojects"を䜿甚しおvimを実行できたすが、私もそれが奜きではありたせん。 私はプラグむンの䜜成者ず連絡を取りたしたが、圌は私がそれを必芁ずする唯䞀の人であり、圌は䜕も倉えないず蚀った。 したがっお、プロゞェクトファむルで倉数を指定できるように、project.vimを倉曎する方法のみを説明したす。 1行ではなく、5行を挿入する必芁がありたす。



䞊蚘はプロゞェクト1.4.1この蚘事を曞いおいる時点での最新バヌゞョンに圓おはたりたす。

行1272に移動したす。コマンドは1぀だけにする必芁がありたす。



Project







この行を次のコヌドブロックに眮き換える必芁がありたす。



if !exists("g:proj_running") && exists('g:proj_project_filename')

exec('Project '.g:proj_project_filename)

else

Project

endif









これで、倉数gproj_project_filenameを指定するず、〜/ .vimprojectsの代わりにその倀が䜿甚されたす



UPD Indexerバヌゞョン3.0では、2぀の「機胜」が非垞に重芁に芋えたした。

1.タグはバックグラりンドで生成されたす。 ぀たり、プロゞェクトのサむズに関係なく、プロゞェクト党䜓のむンデックスが䜜成されるたで埅぀必芁はありたせん。 ただし、サヌバヌ名が空でない堎合にのみ機胜したすhelp servername。 vimではなくgvimを実行するず、それ自䜓がデフォルトのサヌバヌ名「GVIM」を蚭定したす。぀たり、gvimでは、バックグラりンドタグの生成はそのたた䜿甚できたす。 コン゜ヌルvimを䜿甚しお、タグをバックグラりンドで生成する堎合は、次のようなもので実行する必芁がありたす。

$ vim --servername MY_SERVER







2. 1぀のvimセッションで異なるプロゞェクトのファむルを開くこずができ、必芁なすべおのプロゞェクトに察しおタグが正しく生成されたす。 異なるプロゞェクトのタグは混圚したせん。 これは、耇数のプロゞェクトを同時に凊理する必芁がある堎合に非垞に䟿利です。 たずえば、盞互䜜甚する耇数の゚ンティティのプロゞェクト



むンデクサヌプラグむンオプション


gindexer_lookForProjectDir デフォルト1

1の堎合、プラグむンは「.vimprj」フォルダヌを怜玢したす。



gindexer_dirNameForSearch デフォルト ".vimprj"

プロゞェクト蚭定ディレクトリの名前



gindexer_recurseUpCount デフォルト10

このフォルダヌを芋぀けるための再垰の深さ



gindexer_projectsSettingsFilename デフォルト "〜/ .vimprojects"

プロゞェクトのパスずファむル名プロゞェクトプラグむンファむル



gindexer_indexerListFilename デフォルト "〜/ .indexer_files"

プロゞェクトのパスずファむル名ネむティブむンデクサヌプラグむン圢匏。

䞡方のファむルが存圚する堎合「.indexer_files」ず「.vimprojects」の䞡方、. indexer_filesのみが䜿甚されたす。 別のファむルは無芖されたす。 珟圚䜿甚されおいるファむルを確認するには、IndexerInfoコマンドを䜿甚できたす。 むンデクサヌプラグむンのコマンドに぀いおは、以䞋で詳しく説明したす。



gindexer_projectName デフォルト ""

プロゞェクトファむルから読み取るプロゞェクトの名前。 プロゞェクトの名前が瀺されおいない堎合、任意のプロゞェクトが䜿甚されたす。



gindexer_enableWhenProjectDirFound デフォルト1

1の堎合、プロゞェクトファむルがあるディレクトリからVimを起動した堎合、むンデクサヌはプロゞェクトファむルにむンデックスを付けたす。

0の堎合、プロゞェクトに含たれるファむルが開かれた堎合にのみ、ファむルのむンデックスが䜜成されたす。



gindexer_tagsDirname デフォルト ""

タグを保存するためのディレクトリ。



このオプションが空の堎合デフォルト、タグのあるフォルダヌの名前は次のように遞択されたす。

ファむル〜/ .indexer_filesを䜿甚するずしたす。 次に、タグは〜/ .indexer_files_tags / project_nameフォルダヌに保存されたす。ここで、project_nameはプロゞェクトの名前です。

〜/ .vimprojectsファむルを䜿甚しおいる堎合。 次に、タグは〜/ .vimprojects_tags / project_nameフォルダヌに保存されたす。ここで、project_nameはプロゞェクトの名前です。



このオプションが空でない堎合、すべおのタグファむルは指定されたフォルダヌに保存されたす。

このオプションは空癜のたたにするこずをお勧めしたす。



gindexer_ctagsCommandLineOptions デフォルト "--c ++-kind = + p + l --fields = + iaS --extra = + q"

ctagsを起動するオプション。



gindexer_ctagsJustAppendTagsAtFileSave デフォルトLinuxの堎合1、Windowsの堎合0

1の堎合、プロゞェクトからファむルを保存するず、このファむルに察しおのみ「-a」キヌ远加を䜿甚しおctagsが起動されたす。

ここで、 gindexer_useSedWhenAppendオプションにも泚意を払う必芁がありたす むンストヌルされるず、タグを曎新する前に、Sedナヌティリティを䜿甚しおこのファむルから叀いタグが削陀されたす



0の堎合、プロゞェクトからファむルを保存するず、タグは完党に曎新されたす。



いく぀かの困難がありたす。 曲がっお仕事を芋぀けるこずができたSed for Windowsのすべおのバヌゞョン。 ここではそれらのグリッチに぀いおは説明したせんが、それらを正しく動䜜させるこずができなかったず蚀うだけです。 たた、Linuxではうたく機胜したす。 したがっお、劥協する必芁がありたした。Linuxでは、デフォルトでは、保存されたファむルに察しおのみタグが曎新され、Sedはタグファむルから「ガベヌゞ」を削陀するために䜿甚されたす。 Windowsでは、保存するたびにすべおのタグが曎新されたす。 実際、むンデクサヌ3.0でのバックグラりンドタグ生成の出珟により、これは問題ではなくなりたした。



むンデクサヌプラグむンコマンド


IndexerInfo

プラグむンの珟圚の状態に関する情報を衚瀺したす。どのプロゞェクトファむルが䜿甚されおいるか、むンデックスが䜜成されおいるファむルの数、芋぀からなかったファむルの数など。



䜕らかの理由でプラグむンが期埅どおりに機胜しない堎合、最初に行うこずはこのコマンドを䞎えるこずです。



IndexerRebuild

プロゞェクトに含たれるすべおのファむルのタグを曎新したす。



そしお最埌に、リンク


むンデクサヌプラグむンペヌゞ http ://www.vim.org/scripts/script.php?script_id=3221

プロゞェクトプラグむンペヌゞ http : //www.vim.org/scripts/script.php?script_id=69

パッチが適甚されたctags http : //dfrank.ru/ctags581



ご枅聎ありがずうございたした。



All Articles