2014-07-16 1 views
2

Mise à jour importante 22, Juillet 2014

J'ai trouvé que la consommation saut longtemps se produit uniquement lorsque saut aux modules et des cours dans d'autres répertoires. Et sauter de fonctionner ou méthode dans d'autres modules dans d'autres répertoires est rapide (coûts 1 ou 2 secondes)Pourquoi ma fonction ctag saute extrêmement lentement?


Je suis nouveau à ctags, donc j'ai essayé trouver des tutoriels en ligne.

Je lis la plupart d'entre eux, et de trouver celui-ci semble plus officiel: source_forge ctag faq

Mais je trouve suivre la méthode 3 sur ce tutoriel: la construction des fichiers de balises dans chaque répertoire des noeuds de feuille et un fichier d'étiquette non-statique le répertoire principal. Mais je ne peux pas sauter dans les nœuds feuilles entre ses différents modules. Je peux seulement passer du répertoire principal aux fonctions du module des nœuds feuilles. De toute façon, j'ai trouvé un autre tutoriel: benoithamelin's personal tutorial . Et je construis un énorme tag dans le répertoire principal, y compris 4700+ lignes de tag. en utilisant

ctags -R * 

Hey, les amis. Je trouve que je peux sauter maintenant. Sauf, pour certains sauts, je dois attendre environ 30 secondes. C'est insupportable, et pour les autres tags de vue, je peux y passer rapidement en 1 ou 2 secondes. Quel est le problème ici? Comment puis-je le réparer?

Voici un graphique d'arbre de ma structure de répertoire:

my_project 
├── tags # my tag is here 
├── lib 
│   ├── dir1 
│   │   └── sub_dir1 
│   ├── dir2 
│   ├── dir3 
│   └── dir4 
├── logics 
│   ├── dir1 
│   ├── dir2 
│   │   └──sub_dir1 
│   ├── dir3 
│   └── dir4 
├── models 
└── views 
  • Le symptôme est que vous IMPASSE à l'interface d'édition vim, incapable de saisir toute commande, jusqu'à ce que le saut de la fonction complète, il a coûté près de 30 secondes.
  • J'utilise Exubérant Ctags 5.9, Vim 7.4 et Ubuntu 14.04 avec wmii
  • La recherché balise-répertoire my_project I est un répertoire de partage entre le système d'exploitation principal Windows7 et VirtualBox système Ubuntu 14.04 d'exploitation
  • Je suis aussi en utilisant taglist, mais quand j'ai édité un fichier dans le répertoire principal qui contient le fichier de balise, je n'ai pas vu les fonctions dans les sous-répertoires tels que les logiques apparaissent dans la liste de balises (: TlistToogle).
  • Et quand le saut de la fonction est dans l'impasse état de recherche, même vim/chemin/vers/mon/fichier serait assez lent
+1

J'ai environ 7000 sans ralentir. Avez-vous nettoyé tous les anciens fichiers de tags que vous avez générés? – FDinoff

+0

Pourrait-il y avoir quelque chose de mal? c'était dans un répertoire git. Je pense que c'est extrêmement sauvage. J'utilise ctrl +] pour sauter – Zen

+0

@FDinoff, j'ai nettoyé toutes ces balises et ne laisse que le gros tag principal, et le problème existe toujours, il est tellement câblé, le point clé est qu'il peut le faire avec succès, mais avec des délais de 30 secondes, !!! – Zen

Répondre

0

Le mécanisme par lequel vim trouve une balise et saute à elle est, à peu près , ceci:

foreach tagfile in &tags 
    search for $tag in $tagfile 
    if found: 
     get filename from $tagfile 
     foreach dir in &path: 
      if $filename in $dir: 
       open $filename to $tag 

dans cet esprit, il y a 2 points où je pense que vous pourriez frapper un retard:

  • Ouverture $tagname
  • Vérification de $filename dans $dir

simplement parce que ces deux impliquent l'accès du système de fichiers.

Vérifiez le contenu des deux options &tags et &path (avec :set tags et :set path) et assurez-vous qu'il n'y a rien dans l'un de ceux qui se trouve sur un lecteur réseau ou lent.

+0

N'a pas essayé, mais ne veux pas perdre la prime au système. Je suppose que vous dépensez des efforts sur cette question, donc vous le méritez. – Zen

+0

@Zen avez-vous réussi à trouver le problème à la fin? – sanmiguel

+0

@Zen merci pour la générosité! – sanmiguel

1

Je veux juste ajouter ceci ici comme une réponse comme il a été enterré dans un commentaire de @sylvain:

set tags=tags 
set path=. 

Ajouté à mes vimrc résolu ce problème pour moi, en cours d'exécution Neovim 0,2. Au cas où quelqu'un en aurait besoin dans le futur.

Questions connexes