【问题标题】:Vim go to std library method/function definitionVim 转到标准库方法/函数定义
【发布时间】:2012-10-31 08:18:20
【问题描述】:

我喜欢一些与 vim 相关的插件,并且我已经将它们中的大多数安装为 git 子模块(clang_complete、cvim、fugitive、NerdTree、pathogen、snipMate、supertab、taglist)但是有两个基本功能我无法使用.即

1) 示例 -> 如果我编译以下示例

// basic file operations
#include <iostream>
#include <fstream>
using namespace std;

int main () {
  ofstream myfile;
  myfile.open ("example.txt");
  myfile << "Writing this to a file.\n";
  myfile.close();
  return 0;
}

我不知道如何从标准跳转到函数 open,即“myfile.open”。图书馆。如果我将代码粘贴到 Visual Studio 并单击转到定义,它会将我直接带到那个地方。我已经读过这可以用 ctags 来完成,但是我问自己自动完成是否已经在工作,即当我输入“myfile”时。我看到了一大堆 clang 给我的方法,所以我想它应该是从 vim 跳转到类似于 (ctrl + ]) 的定义的其他更好的方法,它应该可以开箱即用。

2) 每当我键入 dot 时,都在 Visual Studio/.net 中。我看到了方法,当我向下滚动该方法时,它提供了简短的描述该方法在做什么。有没有办法在vim中启用类似的东西。据我所知,这应该是 std 库的一个属性,但是我在 std 中看不到任何这样的东西。

【问题讨论】:

    标签: c++ vim autocomplete std go-to-definition


    【解决方案1】:

    我认为您将 Vim 与 IDE 混淆了。

    不能期望在(非常强大的)文本编辑器中可以使用任何 IDE 功能,至少不费力气。

    1. Vim 相当于“转到声明”,&lt;C-]&gt;:tag foo&lt;cr&gt; 依赖于由 exuberant-ctags 生成的一个或多个 tags 或针对您的代码库和任何标准库的某些兼容程序的可用性.因为 Vim 没有为 (AFAIK) 任何语言提供这样的 tags 文件,所以你必须 generate one by yourself 并告诉 Vim 在哪里可以找到它。还有a program, hdrtag, specifically written for that,不过我没用过。

    2. 我想我已经看到一些自动完成插件在弹出菜单中显示方法的签名,其他一些(PHP、Python)打开一个小的“预览”窗口。这就是你所能得到的。如果您有最新的tags 文件,还有&lt;C-w&gt;}

    再次重申:Vim 不是 IDE。

    【讨论】:

    • 感谢您的重播,让我重新表述一下这个问题。 clang_autocomplete 怎么可能已经知道对象 myfile 有哪些特定方法可用。如果 clang 已经知道了,那么我想它也应该知道该方法在哪里。
    • 关注点分离。完成机制和“Go to Declaration”机制是完全分开的。 clang_complete 提供的完成机制使用clang 作为后端,而“转到声明”机制完全依赖于ctags 生成的tags 文件:当您执行&lt;C-]&gt; 时,Vim 会搜索您的@987654335 @ 光标下单词的文件。没有tags 文件:没有“转到声明”。标准或本地。简单的。如果您希望 Vim 在标准方法上“转到声明”,您必须提供针对标准库的头文件生成的tags 文件。
    【解决方案2】:

    确保生成索引时ctags可以找到std lib中的源代码,应该没问题。

    默认情况下,这些索引工具仅在当前目录(及其子文件夹)中添加代码, 所以你需要手动告诉他该代码安装在你系统的什么位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 2011-07-05
      • 2011-06-19
      • 2018-03-29
      相关资源
      最近更新 更多