(Извините за тег C, я сделал это для подсветки синтаксиса. Это больше вопрос vim. Если кто-то более знающий, чем я, думает, что тег следует удалить, пожалуйста, сделайте это)
Скажем, у меня есть эта структура каталогов:
Directory ~/Code/Test/ containing file1.c file2.c file4.c and Sub
Directory ~/Code/Test/Sub/ containing file3.c
файл1.с:
#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.с:
#include <stdio.h>
void function2();
void function2() {
printf("2\n");
}
Sub/file3.c:
#include "../file4.c"
void function3();
void function3() {
printf("3\n");
function4();
}
файл4.с:
#include <stdio.h>
void function4();
void function4() {
printf("4\n");
}
В любом из этих файлов должна быть возможность перейти к определению функций, которые он использует, из других файлов. Так, например, файл1 должен иметь возможность перейти к файлу2, файл1 должен иметь возможность перейти вниз по каталогу к файлу3, файл3 должен иметь возможность перейти вверх по каталогу к файлу4, и вот кикер; все файлы должны иметь возможность перейти к определению printf. Мне также не нужно копировать теги для реализации библиотеки c в каталог Test, чтобы сделать это.
Мне интересно, как я могу это сделать. Я действительно не увлекаюсь монолитными файлами тегов. Меня ужасает наличие файла тегов для всего vim. Файл тегов для каждого каталога меня раздражает. Файл тегов для каждого проекта допустим. Но что мне действительно нужно, так это файл тегов для каждого исходного файла, а затем способ указать, на какие файлы тегов должен ссылаться vim.
В идеале я хотел бы иметь возможность просто нажимать ctrl-] на что угодно, а vim переходить к правильному определению в зависимости от области действия, как в Visual Studio. Я начинаю подозревать, что это невозможно сделать, и если это возможно (с помощью какой-либо комбинации плагинов), это будет очень медленно, что действительно раздражает, потому что я был полностью уверен, что «Vim может делать все, что могут ваши новомодные IDE. Подножка на пару недель есть. Да, это определенно самый мощный текстовый редактор, с которым я когда-либо сталкивался, но как IDE он крайне несовершенен. Когда я использую команду «Перейти к определению», я ожидаю перехода к правильному определению, будь то локальная переменная, в другом файле, в стандартной библиотеке и т. д. До сих пор Vim давал мне веселые результаты, такие как переход от java-файл в ac-файл. И вам нужно использовать отдельную команду, чтобы перейти к определению локальной переменной... Что? (Если есть причина этого, мне было бы интересно узнать)
Мне известно, что я взломал set tags=./tags
в моем .vimrc, и это то, что я сделал до сих пор. Но это не будет масштабироваться, если я работаю над чем-то большим, что связывает отдельные сборки и исходные файлы из отдельных проектов вместе.
(Чтобы быть справедливым по отношению к vim, Visual Studio также не позволяет вам переходить между сборками для поиска определений, но, по крайней мере, у него есть изящество для обслуживания файла заголовка, из которого вы можете «загрузить сборку» и перейти к фактическому исходный код, который вы ищете)