4

最近、自分のプロジェクトで ctags を使い始めました。現在、次のセットアップがあります。

root/tags [contains all non-static tags]
root/foo/tags [contains static tags for the foo directory]
root/bar/tags [static]
root/something/else/tags [etc.]
...

私はできset tags=./tags,tags,/path/to/root/tags、すべてが完璧に機能します。

ただし、私の問題は、一度に複数のプロジェクトに取り組んでいること/path/to/root1です。ファイルを開くたびに手動でタグを設定したくありません。編集中のファイルに基づいてタグを付ける方法はありますか? (つまり、 を編集している場合は、 ?でタグを使用します。/path/to/root2/path/to/root3/path/to/rootX/path/to/root3/foo/x.croot3/tags

私の場合、すべてのプロジェクトが共通の親ディレクトリを共有しています。私が本当に欲しいのは次のようなものです:

set tags=./tags,tags,substitute("%:p:h", "\(^\/path\/to\/.*/\).*$", "\1", "")

しかし、それを機能させるための適切なvimfuを取得できないようです。

編集:これが機能しないことに気付きました。に実際に書き込むことはできませんroot*。代わりに、メインの ctags ファイルを に保存したいと思います。ここでは、と~/ctags/root*/tagsのサブディレクトリが 1:1 でマッピングされています [不思議に思われるかもしれませんが、これらは ClearCase UCM 動的ビューです。どちらも書き込み可能ではありません]~/ctags//path/to//view/XXX//view/XXX/vobs/

4

1 に答える 1

2

あなたが望むものが:

set tags=./tags,tags,substitute("%:p:h", "\(^\/path\/to\/.*/\).*$", "\1", "")

試す:

let &tags = './tags,tags,' . substitute(expand("%:p:h"), "\(^\/path\/to\/.*/\).*$", "\1", "")

:setコマンドに展開はありません。また、「%:p:h」は自動展開されないので、expand(). 見る:

:help :let-option
:help expand()
于 2010-10-06T09:07:19.067 に答える