在 vim 和 python virtualenv 中带有 taglist 的 ctags

Posted

技术标签:

【中文标题】在 vim 和 python virtualenv 中带有 taglist 的 ctags【英文标题】:ctags with taglist in vim and python virtualenv 【发布时间】:2012-04-28 09:01:06 【问题描述】:

我在我的项目中使用virtualenvdjango,我正在尝试寻找一种更有效的方式来浏览django 源代码。

按照这里的建议 - Tools to help developers reading class hierarchy faster - 我通过 ctags 设置了自己

sudo port -v install ctags

并通过https://github.com/vim-scripts/taglist.vim安装了vim插件taglist

不幸的是,当我尝试通过 Ctrl+]“跳转”查看课程时,ctags 似乎无法找到我的 django 课程。

有什么建议可以让ctags 读取位于我的 virtualenv 中的 python 源代码吗?

更新

通过进一步的实验,我意识到ctags 是某种“索引”程序,它解析给定的目录/文件/文件并获取它找到的所有关键字(类名、方法名、函数名等)并将其写入文件。这个文件可以更新,vim 插件taglist 基本上从它读取,以知道当我对类/方法/函数名执行 Ctrlt 时将我发送到哪里.

所以我想出了一个临时和手动的解决方案,我在我的 vim 中执行,如下所示:-

:set tags=~/mytags
:! ctags -R -o ~/mytags ~/.virtualenvs/myprojectname

第一个命令告诉我的 vim/taglist 我的“索引”结果存储在哪里。

第二个命令通过递归搜索 (-R) 向下搜索 ~/.virtualenvs/myprojectname,将索引结果写入 ~/mytags 文件

如果我碰巧在不同的virtualenv 环境中,这是一种维护标签和标签更改的非常手动的方法。

有人知道管理这个ctags 进程的自动化方法吗?

【问题讨论】:

【参考方案1】:

There are many "automatic tags generation" plugins available.

TagList 不会从您手动/自动生成的任何 tags 中读取:它自己调用 ctags 并直接读取其输出。

您可能还想阅读:help autocommand。您可以设置自动命令以重新生成您的tags,如下所示:

autocmd BufWritePost,FileWritePost *.py :silent! !ctags -R -o ~/mytags ~/.virtualenvs/myprojectname

【讨论】:

您的链接是否指向某个地方?我得到一个 404。关于您的示例自动命令,这有点复杂,因为vim 在打开特定文件时必须检测我在哪个 python virtualenv 中,我不确定有没有办法自动检测哪个virtualenv 一个项目文件“属于”。 链接已修复。另请参阅this plugin,它应该更容易处理 virtualenv。

以上是关于在 vim 和 python virtualenv 中带有 taglist 的 ctags的主要内容,如果未能解决你的问题,请参考以下文章

在 3.5.3 virtualenv 中运行时,Vim 中的 Python 错误

3步安装Python虚拟环境virtualenv

[python] virtualenv和virtualenvwrapper管理python虚拟环境

[python] virtualenv和virtualenvwrapper管理python虚拟环境

python 多环境扩展之virtualenv

python virtualenv和virtualenv的使用