Ctags включает внешние функции в качестве прототипа функции?

Я новичок в использовании vim в качестве IDE для C. Я установил c-vim, omnicppcompletion, ctags и другие полезные плагины.

Однако omnicppcompetion основан на базе данных ctags, но кажется, что ctags не может хорошо справляться с такими функциями, как чтение/запись/сокет.

Я создал свои теги, используя следующую команду в своем окне Arch: $ pacman -Qql glibc | grep \.h$ > /tmp/filelist_c ; ctags -L /tmp/filelist_c --c-kinds=+px --fields=+iaS --extra=+q

Однако такие функции, как запись, сокет, не находятся в тегах. Я знаю, что эти функции являются внешними функциями в файлах заголовков, но для выполнения завершения необходимы только список аргументов и функция, и даже внешние функции содержат достаточно информации для меня.

Любая идея о создании тегов, которые также включают внешние функции?


person user1477716    schedule 24.06.2012    source источник


Ответы (1)


Заголовочные файлы *.h известны ctags как файлы C++, поэтому самый простой способ добиться того, что вам нужно, — добавить следующую опцию в командную строку ctags:

--c++-kinds=+p+l

И почему бы не использовать плагин Indexer, созданный специально для управления ctags в Vim?

person Dmitry Frank    schedule 24.06.2012
comment
Спасибо, но добавление --c++-kinds=+p+l тоже не работает. Попробую индексатор - person user1477716; 27.06.2012
comment
Должно работать, только что проверил. Я создал файл test.h со следующим содержимым: extern void my_func(int a, int b); и выполнил ctags с помощью следующей команды: ctags --c++-kinds=+p ./test.h. Полученный файл тегов содержит следующую строку: my_func ./test.h /^extern void my_func(int a, int b);$/;" p - person Dmitry Frank; 17.07.2012
comment
Извините, я знаю, что это должно сработать. Но мне нужно выполнить системные вызовы, такие как socket(),connect(). Пользовательские функции уже работают у меня даже без каких-либо дополнительных параметров ctags. - person user1477716; 28.07.2012