28 votes

Obtenez des ctags dans vim pour aller à la définition, pas à la déclaration

J'ai le problème que ctags dans vim / gvim m'amène souvent à une déclaration directe au lieu de la définition réelle de la fonction.

Une façon de contourner cela?

34voto

Derek Points 1558

Je suis un peu en retard avec cette réponse, mais je pense que le moyen le plus simple est d'utiliser "g ctrl-]" au lieu de "ctrl-]". S'il n'y a qu'un seul match, il vous y mènera. S'il y a plusieurs correspondances, il les listera toutes, vous permettant de choisir celle que vous voulez, tout comme: tselect. Le meilleur des deux mondes. :)

6voto

Nathan Fellman Points 31310

Vous devriez pouvoir utiliser tn et tp pour passer aux différentes balises correspondantes.

  • Appuyez sur ^] pour vous amener au premier match.
  • Si ce n'est pas la correspondance que vous souhaitez, tapez :tn pour passer à la suivante.
  • Si vous avez tapé :tn trop de fois, vous pouvez taper :tp pour revenir à la précédente.

6voto

DrAl Points 29528

Je crois que Vim va à la première balise dans le fichier de tags par défaut. Vous pouvez choisir un autre si vous préférez: utiliser :tj (similaire à :tselect, mais auto-saut si il n'y a qu'un seul match) ou Ctrl-] suivie par :tn).

Le seul moyen de changer la valeur par défaut est de changer l'ordre des balises de fichiers, mais je ne crois pas ctags offre une option de ligne de commande pour ce faire.

Ce n'est pas aussi difficile que cela sonne comme vous avez essentiellement besoin d'un script qui ouvre le fichier de tags, les trie par le 'genre' de la balise et l'écrit de nouveau. Le 'genre' dans le tag est un caractère unique décrivant si c'est une fonction (f), un prototype de fonction (p), une macro, un énumérés nom etc etc etc. Si vous êtes sous Linux, il pourrait, en théorie, être aussi simple que:

#!/bin/sh
ctags -R -f - . | tac > tags

Depuis tac inverse l'ordre des lignes dans un fichier, ce sera automatiquement mis à la définition. Cependant, cela devient un peu plus compliqué, car l'en-tête doit être maintenue et Vim préfère le fichier de balises pour être triés, il est donc préférable de passer par le fichier et le tri sur la première entrée (le nom de la balise) en marche avant et puis la nature dans l'ordre inverse. Donc, quelque chose de plus compliqué peut-être mieux.

Je m'excuse pour le plug sans vergogne, mais j'ai écrit un plugin Vim que (indirectement) fait ce que vous avez besoin. Il est prévu pour l'ajout de beaucoup plus d'mettant en évidence des groupes pour des choses comme les noms de fonctions, macros, les énumérations, etc. Cependant, l'une des autres choses que ce n'est re-trier le fichier de balises, de sorte que la fonction de mise en œuvre vient avant la déclaration de la fonction, par conséquent, d'atteindre ce que vous voulez (j'ai eu le même besoin que vous). Si vous ne voulez pas de mettre en évidence les fonctionnalités, vous pourriez probablement bande tout assez facilement: c'est assez simple programme en python et un moyen encore plus simple script Vim et est disponible à partir de mon site.

1voto

Johan Points 6127
 :tselect my_little_function
 

et vous obtiendrez une liste de correspondances. ou si vous passez à une balise et que vous n'êtes pas satisfait, tapez

 :tselect
 

Et vous obtenez une liste d'alternatives pour la dernière balise active.

1voto

Cette option a mieux fonctionné pour moi

Mettez la ligne suivante dans votre .vimrc et maintenant vous pouvez utiliser le double clic de la souris (sur le variable/entry dans votre fichier) pour sauter à l'emplacement marqué. Si une seule correspondance est trouvée, elle sautera immédiatement. Si plusieurs entrées sont des correspondances, il demandera une entrée utilisateur.

 :map <2-LeftMouse> g< c-]>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X