2017-01-22 1 views
1

J'ai essayé d'utiliser ctags avec vim et je découvre le problème suivant:Vim: tnext ne se déplace pas le curseur à la balise suivante

Tout d'abord, nous allons voir l'image suivante: enter image description here Si j'appuie sur C] puis le curseur se déplace sur la ligne 7 comme vous pouvez le voir ici: enter image description here

Mais si je tape la commande: tn le curseur est toujours sur la ligne 7 au lieu de la ligne 14, où la balise suivante est. Pourquoi cela se passe-t-il et comment puis-je résoudre ce problème? Si vous regardez l'image suivante enter image description here en bas à gauche il montre: "tag 2 of 3" ce qui signifie: tn fonctionne, je pense, mais le curseur ne bouge pas.

+0

Lire encore: help: tnext'. – romainl

+0

@romainl, il dit: sauter à [count] la prochaine balise correspondante, où [count] est 1 par défaut. J'ai lu le tag-! section aussi, et j'ai vu que si l'étiquette est dans le fichier en cours, l'action suivante sera effectuée: goto tag. Et c'est exactement ce à quoi je m'attends, mais malheureusement ça ne marche pas. Qu'est-ce que je rate? – IonutC

+0

Vous pouvez afficher la liste par ': tselect' pour comprendre' tag 2 of 3'. –

Répondre

3

Si vous regardez votre fichier tags vous pouvez voir que vos trois définitions pour fc() sont identiques:

fc pam.cpp /^  void fc() {$/;" f class:A 
fc pam.cpp /^  void fc() {$/;" f class:B 
fc pam.cpp /^  void fc() {$/;" f class:C 

Par défaut, Ctags ne fournit pas une ligne: informations sur les colonnes à Vim, elle donne simplement une motif de recherche. Comme c'est le même modèle de recherche pour les trois balises, Vim effectue toujours la même recherche et finit toujours au même endroit. Ce n'est pas grave si vous utilisez :tag fc, <C-]>, :tnext, :tselect ou un de leurs amis.

Avec l'option -n, Ctags sorties des numéros de ligne au lieu de modèles de recherche:

fc pam.cpp 14;" f class:B 
fc pam.cpp 21;" f class:C 
fc pam.cpp 7;" f class:A 

C'est mieux parce que Vim peut maintenant passer à la ligne correcte, mais les balises sont commandés de manière incorrecte. Une façon de résoudre ce problème serait d'utiliser l'option -u:

A pam.cpp 5;" c file: 
fc pam.cpp 7;" f class:A 
B pam.cpp 12;" c file: 
fc pam.cpp 14;" f class:B 
C pam.cpp 19;" c file: 
fc pam.cpp 21;" f class:C 

En conclusion, vous devez générer votre tags avec les -n et -u options. Quelque chose comme:

$ ctags -Rnu . 

Voir $ man ctags.

+0

Je pensais que Vim verrait qu'ils sont de différentes classes, mais ensuite j'ai lu ': help ctags' et j'ai vu que'; "' est interprété par Vi comme le début d'un commentaire (je ne le savais pas) donc ce qui suit sera ignoré et Vim ne verra pas qu'ils sont de différentes classes.Tout est logique maintenant.Merci pour la réponse – IonutC

+0

S'il vous plaît voir mon edit – romainl

+0

Vim ne se soucie tout simplement de la classe ou quoi que ce soit, sauf le nom de fichier et l'ex-commande à exécuter – romainl