90 votes

Comment naviguer dans un grand projet dans VIM

Comment avez-vous gérer les grands projets (des centaines de fichiers) à l'aide de seulement VIM?

Personnellement, je commence à avoir des problèmes dans tous les grands que pour les petits projets.

  • est-il possible de rapidement "go to file', de préférence avec le nom achèvement?
  • de même pour "aller à la définition de la classe", quand il est dans un autre fichier

J'ai un peu connaître tous les VIM notions de base, donc je n'ai pas de problème pour l'utiliser pour l'écriture de scripts ou d'une modification rapide du code source. Mais il devient très confus pour moi, quand j'ai pour naviguer entre les fichiers.

34voto

system PAUSE Points 10051

VIM a un excellent support pour les balises. Une fois que vous avez créé un fichier de balises pour votre projet, vous pouvez passer à une définition ou une déclaration de méthode, classe, etc., y compris le saut entre les fichiers, tous à l’intérieur de la même session d’édition.

Essayez

Pour générer un fichier de balises pour C/C++, allez à votre invite du shell (je suppose que votre système * nix/Cygwin) et le type

ou

29voto

avocade Points 718

J’aime les solutions simples, ma préférée consiste à naviguer pour le moment :

Ajouter à``

Ensuite, tapez ceci dans l’éditeur de trouver le fichier n’importe où dans le répertoire de travail courant (pwd)

Vous pouvez utiliser saisie semi-automatique par tabulation sur les noms de fichiers pour trouver les questions à choix multiples, ce qui rend cette TextMate convertir très heureux.

14voto

donut Points 1270

J'utilise une combinaison de NERDTree (répertoire encadré), FuzzyFinder Textmate (go-to-file comme TextMate est CMD+T), et des Sessions (:h séances) pour m'aider à faire face à de grands projets.

Je suggère d'utiliser certains des séances helper plugin. Je voudrais rappeler ce que j'utilise, mais je ne suis pas satisfait avec elle encore. Juste Google "vim sessions".

Une chose à noter à l'obtention de FuzzyFinder Textmate de travail, c'est qu'il dépend d'une ancienne version de la FuzzyFinder plugin, plus précisément v2.16. Quelque chose de plus élevé et vous obtiendrez des erreurs. Mais cela vaut vraiment la peine. Alors qu'il n'a pas de nom d'achèvement, sa recherche est intelligent donc, si je recherche pour fro/time/actionsphp il va tirer vers le haut le fichier apps/(fro)ntend/modules/(time)_tracking/actions/(actions).class.(php) (parenthèse désigner ce qu'il est matching). C'est très facile de repérer les fichiers qui ne sont uniques par leur nom de dossier.

7voto

DrAl Points 29528

Ainsi que la précieuse ctags et les différentes commandes. J'ai aussi ne pouvait pas vivre sans le projet de plugin, qui permet d'avoir les fichiers d'intérêt associé à un projet dans un volet séparé. Je ne me souviens pas combien de mon installation est personnalisée, mais si je veux ouvrir un fichier source appelé de Débogage.c, j'ai frappé:

<F12>     " Opens the project pane
/De       " Searches for "De", which is likely to be enough to find Debug.c or possibly Debug.h
<ENTER>   " Opens the selected file and closes the project pane

J'ai souvent alors:

:vsp      " Vertically split the window
<F12>     " Reopen project pane
#         " Search back to find previous entry with the same name (to find
            Debug.h if I was on Debug.c: my headers are in Headers/ and
            my source is in Source/, so the headers come earlier in the list
            than the source).  I use * to go the other way, obviously.
<ENTER>   " Open the header file in the other window and close the project window.

Avec cette courte séquence, je peux ouvrir n'importe quel fichier et c'est la tête dans une fissure verticale. Depuis le projet de la fenêtre du plug-in est simplement un fichier texte, son achèvement est atteint par l'utilisation de Vim de recherche de la capacité.

4voto

Ben Points 2765

Départ dans Vim 7.3, l' :find commande a onglet-complétion des noms de fichiers.

Donc, si vous réglez votre 'path' option pour contenir l'ensemble de votre projet (probablement à l'aide de l' ** générique pour permettre de manière récursive à la recherche des sous-répertoires), alors vous pouvez utiliser l' :find, :sfind, :tabfind, etc. les commandes à fin de n'importe quel fichier de votre projet. Cela permet aussi de sauter à des fichiers directement avec gf et ses amis, si le nom de fichier est dans votre texte, par exemple dans une directive include.

Avec cette méthode, aucun des outils externes ou plugins sont nécessaires pour accéder à des fichiers spécifiques. Bien que, il peut certes pas être aussi rapide et facile à utiliser, et ne tient pas compte de la nécessité pour le saut d'obstacles pour les définitions. Pour les définitions, j'utilise ctags comme d'autres réponses suggèrent.

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