Saltando da tag de definição de função para a tag prototype


7

Tanto quanto eu entendo, o Vim tem um suporte interno para tags ( ctagsneste caso)

Agora eu tenho uma fonte C comum e um arquivo de cabeçalho C. O arquivo de cabeçalho possui void foo(void);e o arquivo de origem possui void foo(void) { /* */ }.

Agora, quando estou no arquivo de origem, posso usá- :tags foolo, ele irá para a definição de função no arquivo de origem. Mas se eu usar :tnextagora, ele não irá para a declaração da função no arquivo de cabeçalho.

Eu sinto que isso deve ser de alguma forma possível. É isso?


11
(como) você correu ctags? Veja também :h gD.
VanLaser

Eu corri ctags -R, que foi o erro
hgiesel

Respostas:


6

Ok, eu fiz isso:

Tudo tem a ver com ctags: Primeiro, crie dois arquivos chamados foo.ce foo.hteste-os: foo.hAnote:

int bar(void);

Em foo.cwrite down:

int bar(void) { /* */ }

E no diretório em que esses dois arquivos estão, execute:

ctags --list-kinds

Você obtém uma longa lista de idiomas com esses tipos de tags. Encontre C. Observe a seguinte linha:

protótipos de função p [desativado]

Eu chamaria isso de declaração de função, mas de qualquer maneira. Portanto, você precisa ativar tags para protótipos de funções ao executar ctags. Você faz isso chamando:

ctags -R --c-kinds=+p

Observe que o mesmo se aplica a outros idiomas, por exemplo:

ctags -R --java-kinds=+l

Agora você pode abrir foo.c( vim foo.c) e entrar :tag bar. Ele mostrará a definição da função. Entre :tnexte você irá pular foo.hpara a declaração de bar.

No entanto, observe também que ctagsnão se importa com a correção. Por exemplo, a baração declarativa não pode se aplicar à definição de bar, pois eu não incluí o arquivo de cabeçalho.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.