(为 C 标签道歉,我这样做是为了语法高亮。这更像是一个 vim 问题。如果有人比我认为应该删除标签,请这样做)
假设我有这个目录结构:
Directory ~/Code/Test/ containing file1.c file2.c file4.c and Sub
Directory ~/Code/Test/Sub/ containing file3.c
文件1.c:
#include <stdio.h>
#include "file2.c"
#include "Sub/file3.c"
void function1();
int main (int argc, char *argv[]) {
function1();
function2();
function3();
return 0;
}
void function1() {
printf("1\n");
}
文件2.c:
#include <stdio.h>
void function2();
void function2() {
printf("2\n");
}
子/file3.c:
#include "../file4.c"
void function3();
void function3() {
printf("3\n");
function4();
}
文件4.c:
#include <stdio.h>
void function4();
void function4() {
printf("4\n");
}
在这些文件中的任何一个文件中,都应该可以从其他文件跳转到它使用的函数的定义。例如,file1 应该能够跳转到 file2,file1 应该能够向下跳转到 file3,file3 应该能够向上跳转到 file4,这就是关键;所有的文件都应该能够跳转到 printf 的定义。为了做到这一点,我也不应该将 c 库实现的标签复制到 Test 目录中。
我想知道我该怎么做。我真的不热衷于单一标签文件。拥有一个 vim 范围的标签文件让我感到恐惧。每个目录的标签文件让我很恼火。每个项目的标签文件是可以忍受的。但我真正想要的是每个源文件都有一个标签文件,然后是一种指定 vim 应该引用哪些标签文件的方法。
理想情况下,我希望能够在任何东西上按 ctrl-] 并让 vim 根据范围内的内容跳转到正确的定义,就像 Visual Studio 一样。我开始怀疑这是无法做到的,如果是(通过插件的某种组合)它会非常慢,这真的很烦人,因为我完全在“Vim 可以做任何你新奇的 IDE 可以做的事情” “在那里流行了几个星期。是的,它绝对是我遇到过的最强大的文本编辑器,但作为一个 IDE,它非常粗糙。当我使用“转到定义”命令时,我希望得到正确的定义,无论它是局部变量、不同的文件、标准库等。到目前为止,Vim 给了我一些有趣的结果,比如从一个java文件转ac文件。而且您必须使用单独的命令来跳转到局部变量的定义...什么?(如果这背后有原因,我很想知道)
我知道set tags=./tags
在我的 .vimrc 中工作,这就是我迄今为止所做的。但是,如果我处理将来自不同项目的单独程序集和源文件链接在一起的大型项目,这将无法扩展。
(为了公平起见,Visual Studio 也不允许您跳过程序集来查找定义,但它至少可以提供一个头文件,您可以从中“加载程序集”并导航到实际的您正在寻找的源代码)