如何在 Vim 会话期间更改 Indexer 使用的项目?

How to change the project used by Indexer during a Vim session?

我正在尝试使用索引器 (vimscript #3221) to index the files of a specific project created with project.vim (vimscript #69)。正如插件的文档所说,如果我不在 ~/.vimrc 中设置 g:indexer_projectsSettngsFilename 变量,它默认使用 ~/.vimprojects 文件。但我希望能够在不在 ~/.vimrc 中设置该变量的情况下指定项目(即,我想以更本地的方式进行)。

我尝试在_vimrc_local.vim中设置g:indexer_projectsSettngsFilename,在Vim启动后手动设置,重新获取插件(通过运行ning :so) 一旦设置了变量,运行 :IndexerRebuild 之后。在任何一种情况下,插件都不会为项目创建索引文件。

那么如何让 Indexer 在 Vim 会话期间更改其项目?

Indexer 插件有一个依赖项:Vimprj,它管理不同项目的选项:正是您所需要的。

Indexer repository has some examples under doc/examples directory. Check, for example, doc/examples/vimprj_indexer_files.

简而言之,在你的项目根目录下,你需要创建.vimprj目录,然后当你打开你项目目录下的某个文件时,所有.vimprj/*.vim文件都会被获取,并且 $INDEXER_PROJECT_ROOT 变量将被设置为您的项目的路径(它比 .vimprj 目录高一级)。

我通常也将我的 .indexer_files 放在 .vimprj 目录中,并从 .vimprj/my.vim 文件中引用它,如下所示:

" get path to ".vimprj" folder
let s:sPath = expand('<sfile>:p:h')

" specify our ".vimprj/.indexer_files"
let g:indexer_indexerListFilename = s:sPath.'/.indexer_files'

我可以这样从 .indexer_files 引用到 $INDEXER_PROJECT_ROOT

[my_project]
option:ctags_params = "--langmap=c:.c.h --languages=c"

$INDEXER_PROJECT_ROOT

详见文章:Vim: convenient code navigation for your projects,对Indexer + Vimprj的用法讲解的很透彻