2013-09-02 1 views
0

Je viens d'installer ctags via homebrew et joint en annexe la ligne suivante dans mon ~/.vimrc:Pas de tags fichier dans GVim sur certains fichiers, mais pas sur d'autres

set tags=./tags,tags;$HOME 

Et puis je courais /usr/local/bin/ctags -R . sur certains de mes répertoires et ouvris quelques-uns fichiers stockés dans les répertoires, puis certains de ces scripts ont réussi à importer des fichiers de balises, mais d'autres pas. Par exemple, j'ai ouvert test.py sur mon espace de travail Python, que j'ai déjà exécuté la commande ci-dessus, puis j'ai essayé de mettre Ctrl+] sur mon GVim, il semble avoir réussi à importer le fichier de balises.

J'ai également ouvert hello.go situé dans ~/go/src/github.com/user/hello, dans lequel j'ai déjà exécuté la commande ctags ci-dessus, importé avec succès le fichier de balises. Cependant, mon fichier test.rb, que je viens de mettre dans le répertoire de Go pour faire un test, n'a pas importé le fichier de balises correctement.

Aussi, quand j'exécutant la commande ctags sur ~/another_go_workspace/src, puis ouvert le fichier situé dans ~/another_go_workspace/src/hello/hello.go, le fichier n'a pas importé le fichier tags ... Cependant, depuis que je set tags=./tags,tags;$HOME sur mon apposé ~/.vimrc, n » t il cherche automatiquement des répertoires plus élevés, non?

Alors, qu'est-ce qui me manque?

Et si elle n'importe pas les balises fichier dans des répertoires plus, dois-je exécuter la commande ctag sur chaque répertoire, à savoir le ~/go/src/soccer_analysis, ~/go/src/coffee, ~/go/src/utility, etc, etc ...?

Merci.

Répondre

3

Votre valeur pour l'option tags est correcte et vos hypothèses sur son comportement sont également correctes.

Avec réglage, set tags=./tags,tags;$HOME, Vim recherchera un fichier tags dans le répertoire du fichier en cours d'abord, puis pour un fichier tags à partir du répertoire de travail vers le haut pour $HOME.

Cela vous permet de générer un fichier tags à la racine de votre projet et assurez-vous que Vim le récupérera où que vous soyez dans votre projet et quel que soit le répertoire de travail.

Avec la structure et vos réglages actuels suivants:

project/ 
    bar/ 
     bar.js 
    foo/ 
     foo.js 
    project.js 
    tags 

Vim devrait trouver tags dans tous les scénarios suivants et leurs variantes:

$ vim project.js 
$ cd foo && vim foo.js 
$ cd bar && vim bar.js 
$ vim foo/foo.js 
$ vim bar/bar.js 
$ cd bar && vim bar.js ../project.js 

Chaque fois que vous ajoutez un nouveau fichier à votre projet ou écrire dans un fichier existant, vous devez réindexer votre projet entier. D'après ce que vous avez écrit sur le fichier ruby, il semble que vous n'avez pas exécuté ctags après avoir ajouté le fichier. Essayez ceci pour une sélection de fichiers dans votre projet: :echo tagfiles().

+0

Merci. Alors, quelle est la meilleure façon? 1) générer et mettre mon fichier 'tags' uniquement sur' $ HOME' et avoir tous les scripts sur tout mon système fait référence au fichier unique, ou 2) générer et mettre sur chaque répertoire et sous-répertoire où je travaille avec un script de programmation (Python, Go, JS, etc ...)? Et en ce qui concerne les balises 'go', je viens de trouver que' ctags' ne supporte pas 'go' canoniquement et je dois utiliser [gotags] (https://github.com/jstemmer/gotags) pour utiliser' Fonctionnalité de ctag sur 'go' aussi. Cependant, il semble qu'il ne supporte pas la génération récursive des tags, c'est pourquoi je me demande quelle est la meilleure façon ... – Blaszard

+0

Je n'ai aucune idée de gotag. Mon opinion est que vous devriez avoir un seul fichier de tags à la racine de chaque projet. C'est une méthode éprouvée qui fonctionne très bien avec vim. – romainl

0

Non, vim ne va pas dans les répertoires pour trouver les fichiers de tags. Je vous recommande de démarrer vim à partir du répertoire de premier niveau (où vous avez généré vos balises), puis de le parcourir jusqu'au fichier de votre choix.

vim go/src/coffee 

Vim est capable de naviguer dans les systèmes de fichiers bien avec des commandes comme :Explore.

EDIT: J'avais tort, le point-virgule peut être utilisé pour rechercher vers le haut. Voir :help file-searching

Aussi, j'ai remarqué que vous avez essayé d'ajouter $HOME à vos étiquettes, ce qui ne va pas fonctionner pour un certain nombre de raisons.

Documentation (:help 'tags') dit:

Filenames for the tag command, separated by spaces or commas. 

Par conséquent:

  1. Le délimiteur est incorrect
  2. $HOME va être traité comme un balises fichier

Ainsi, le "correct" façon de le faire serait:

set tags=./tags,tags,$HOME/tags 

Même si vous faites cela, je ne pense pas que ça va marcher.Les fichiers de balises comprennent principalement 2 éléments, un motif de recherche et un nom de fichier. Si vous avez généré le fichier par le haut, tous les noms de fichiers seront relatifs à ce répertoire. Donc, si vous êtes au fond d'un sous-répertoire, vim va essayer d'ouvrir le fichier en utilisant le chemin de fichier relatif en commençant par ce sous-répertoire.

+0

je l'ai écrit dans le cadre après avoir regardé [cette réponse] (http://stackoverflow.com/questions/11975316/vim-ctags- tag-not-found). Mais vous voulez dire que c'est faux, non? Et que signifie la deuxième occurrence de 'tags' dans' ./tags, tags, $ HOME/tags'? – Blaszard

+0

Oui, Vim peut rechercher des fichiers de tags en utilisant le point-virgule comme dans la question d'OP: 'set tags =./Tags;, tags;'. – romainl

+1

Eh bien, on dirait que vous apprenez quelque chose de nouveau tous les jours. – Balthamos

0

Le problème peut avoir été causé par une faute de frappe. Je pense que

set tags=./tags,tags;$HOME

devrait être

set tags=./tags;,tags;$HOME

Questions connexes