LINUX.ORG.RU

ctags: две функции с одинаковым именем в одном файле


0

1
#ifdef MY_DEFINE

#define avg(a,b) ((a)/2 + (b)/2)
int func()
{
        return 1;
}

#else

#define avg(a,b) (((a) + (b))/2)
int func()
{
        return 0;
}

#endif

ctags генерирует строку только для одного варианта функции, а для дефайнов — две:

!_TAG_FILE_FORMAT       2       /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED       1       /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR    Darren Hiebert  /dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME      Exuberant Ctags //
!_TAG_PROGRAM_URL       http://ctags.sourceforge.net    /official site/
!_TAG_PROGRAM_VERSION   5.7     //
avg     f.c     2;"     d       file:
avg     f.c     9;"     d       file:
func    f.c     /^int func()$/;"        f

Как сделать, чтобы генерировалась запись для каждой функции?

★★★★★

Или как сделать, чтобы vim по нажатию g Ctrl+] выдавал бы на экран оба вирианта.

ttnl ★★★★★
() автор топика
Ответ на: комментарий от shty

>а зачем Вам такая функция?

Для простоты. Чтобы тема не разъехалась на две страницы.

ttnl ★★★★★
() автор топика
Ответ на: комментарий от waker

>использовать cscope

В cscope можно встать на функцию и перейти к ее описанию? Или нужно выходить в меню?

Когда я пробовал cscope, это было невозможно, и навигация отнимала кучу времени.

ttnl ★★★★★
() автор топика
Ответ на: комментарий от waker

В cscope всегда бесило следующее:

Find this C symbol:
Find this global definition:
Find functions called by this function:
Find functions calling this function:
Find this text string:
Change this text string:
Find this egrep pattern:
Find this file:
Find files #including this file:
ttnl ★★★★★
() автор топика
Ответ на: комментарий от ttnl

Или как сделать, чтобы vim по нажатию g Ctrl+] выдавал бы на экран оба вирианта.

может emacs + xrefactory и ну его, этот vim?

shty ★★★★★
()
Ответ на: комментарий от shty

>ок, у меня для Вас не очень хорошая новость про ctags

Ага, но для дефайнов-то работает.

ttnl ★★★★★
() автор топика
Ответ на: комментарий от shty

>может emacs + xrefactory и ну его, этот vim?

Не, в vim я могу практически все, что хочу. Ни за что его не променяю )

ttnl ★★★★★
() автор топика
Ответ на: комментарий от ananas

Ключевые слова MY_DEFINE и func выбраны, чтобы показать, что это пример. Вопрос про применение ctags.

ttnl ★★★★★
() автор топика
Ответ на: комментарий от waker

>да, можно. все настраивается.

Спасибо, попробую. Вообще, отвыкнуть от привычного сложно, но если визуально то же самое, то разницы нет.

ttnl ★★★★★
() автор топика
Ответ на: комментарий от AlexVR

>А чем эти функции отличаются, чтобы их дважды выдавать?

такие функции выбраны для простоты, чтобы тема не разъехалась на две страницы.

ttnl ★★★★★
() автор топика
Ответ на: комментарий от ttnl

я понял, что для примера. и тоже в качестве примера привел вариант с одним прототипом и разным наполнением

ananas ★★★★★
()
static int
walk_to_the_base()
{
	int		ret;

	//FIXME: The success is affected by current directory
	ret = chdir("../share/faketech/");

	return (ret < 0) ? 0 : 1;
}

static int
walk_to_the_base()
{
	return 0;
}

ctags --c-kinds=+px --fields=+Sn -R . ../include

walk_to_the_base        link/faketech.c /^walk_to_the_base()$/;"        f       line:76 file:
walk_to_the_base        link/faketech.c /^walk_to_the_base()$/;"        f       line:87 file:

Вот только по g ctrl+] перейти можно только на ту функцию которая выше.

amaora ★★
()
Ответ на: комментарий от amaora

>Вот только по g ctrl+] перейти можно только на ту функцию которая выше.

Получается, это чисто vim'овская проблема? А по другой комбинации клавиш перейти можно?

ttnl ★★★★★
() автор топика
Ответ на: комментарий от waker

>если не путаю - «2 ctrl+]» перейдет на 2е определение, и т.д.

Нет, здесь проблема в том, что vim использует regexp для поиска а не номер строки. Если добавить ещё одну функцию выше и не перегенерировать тег-файл то будем переходить на эту новую функцию.

amaora ★★
()
Ответ на: комментарий от ttnl

>Или как сделать, чтобы vim по нажатию g Ctrl+] выдавал бы на экран оба вирианта.

Сударь, выкиньте вим и это старье типа ctags и используйте kdevelop с полноценным парсером.

Pavval ★★★★★
()
Ответ на: комментарий от amaora

тем не менее,

<LeftMouse> CTRL-]
CTRL-]                  Jump to the definition of the keyword under the
                        cursor.  Same as ":tag {ident}", where {ident} is the
                        keyword under or after cursor. 
                        When there are several matching tags for {ident}, jump
                        to the [count] one.  When no [count] is given the
                        first one is jumped to. See tag-matchlist for
                        jumping to other matching tags.
 это работало.

обратите внимание на [count]

waker ★★★★★
()
Ответ на: комментарий от amaora

это да, про разные файлы я не подумал.

waker ★★★★★
()
Ответ на: комментарий от ttnl

> Не, в vim я могу практически все, что хочу. Ни за что его не променяю )

это вы просто мало хотите :-)

ott ★★★★★
()
Ответ на: комментарий от Pavval

>Сударь, выкиньте вим и это старье типа ctags и используйте kdevelop с полноценным парсером.

vim моим потребностям удовлетворяет полностью. Я не буду менять его на другое из-за одного недостатка, к тому же он частично решается советом amaora: --fields=+Sn

ttnl ★★★★★
() автор топика
Ответ на: комментарий от ott

>это вы просто мало хотите :-)

Возможно. А какие killer features есть у современных редакторов типа kdevelop и eclipse?

ttnl ★★★★★
() автор топика
Ответ на: комментарий от ttnl

И ведь кто-то хотел, чтобы тема не расползлась на две страницы...

)))

LamerOk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.