Comment gérez-vous de gros projets (des centaines de fichiers) en utilisant uniquement VIM?
Personnellement, je commence à avoir des problèmes dans tout projet plus grand que petit.
- y a-t-il un moyen d'aller rapidement au fichier, de préférence avec la complétion du nom?
- idem pour 'aller à la définition de classe', quand il est dans un autre fichier
Je connais un peu toutes les bases de VIM, donc je n'ai aucun problème à l'utiliser pour écrire des scripts ou éditer rapidement du code source. Mais cela devient vraiment compliqué pour moi lorsque je dois naviguer entre les fichiers.
NERDTree
Réponses:
VIM a un excellent support pour les balises . Une fois que vous avez créé un fichier de balises pour votre projet, vous pouvez accéder à une définition ou à une déclaration d'une méthode, d'une classe, etc., y compris en parcourant les fichiers, le tout dans la même session d'édition.
Essayer
Pour générer un fichier de balises pour C / C ++, accédez à l'invite de votre shell (je suppose que votre système est * nix / Cygwin) et tapez
ou
la source
:help cscope
pour plus d'informations. Il y a une belle liste de fonctionnalités dans l'introduction (sous "Elle est conçue pour répondre à des questions comme").J'aime les solutions simples, ma façon préférée de naviguer en ce moment est:
Ajouter à
~/.vimrc.local
Tapez ensuite ceci dans l'éditeur pour trouver le fichier n'importe où dans le répertoire de travail actuel (pwd)
Vous pouvez également utiliser la complétion par tabulation sur les noms de fichiers pour trouver plusieurs choix, ce qui rend cette conversion TextMate très heureuse.
la source
vim .
avant d'exécuter la commande: /J'utilise une combinaison de NERDTree (barre latérale du répertoire), FuzzyFinder Textmate (aller dans un fichier comme CMD + T de TextMate) et Sessions (: h sessions) pour m'aider à gérer de grands projets.
Je suggérerais d'utiliser un plugin d'aide aux sessions. Je mentionnerais ce que j'utilise, mais je n'en suis pas encore satisfait. Juste Google "sessions vim".
Une chose à noter pour faire fonctionner FuzzyFinder Textmate est que cela dépend d'une ancienne version du plugin FuzzyFinder, en particulier la v2.16. Tout ce qui est supérieur et vous obtiendrez des erreurs. Mais ça vaut vraiment la peine. Bien qu'il n'ait pas de complétion de nom, sa recherche est intelligente, donc si je la recherche,
fro/time/actionsphp
elle extraira le fichierapps/(fro)ntend/modules/(time)_tracking/actions/(actions).class.(php)
(les parenthèses indiquent ce qu'il correspond). Il est très facile de sélectionner des fichiers qui ne sont uniques que par leur nom de dossier.la source
Ainsi que les précieux ctags et les différentes commandes associées. Je ne pourrais pas non plus vivre sans le plugin de projet , qui vous permet d'associer les fichiers d'intérêt à un projet dans un volet séparé. Je ne me souviens pas à quel point ma configuration est personnalisée, mais si je veux ouvrir un fichier source appelé Debug.c, je frappe:
Je fais souvent alors:
Avec cette séquence relativement courte, je peux ouvrir n'importe quel fichier et son en-tête dans une division verticale. Étant donné que la fenêtre du plugin de projet n'est qu'un fichier texte, la complétion est obtenue en utilisant la capacité de recherche de Vim.
la source
À partir de Vim 7.3, la
:find
commande a complété la tabulation des noms de fichiers.Donc , si vous définissez votre
'path'
option pour contenir votre projet (probablement en utilisant le**
caractère générique pour permettre la recherche récursive les sous - répertoires), vous pouvez utiliser le:find
,:sfind
,:tabfind
, etc. commandes avec la fin pour obtenir à tout fichier dans votre projet. Cela permet également d'accéder directement aux fichiers avecgf
et amis si le nom du fichier est dans votre texte, par exemple dans une directive d'inclusion.Avec cette méthode, aucun outil externe ou plug-in n'est nécessaire pour naviguer vers des fichiers spécifiques. Bien que, il ne soit certes pas aussi rapide ou facile à utiliser, et ne répond pas au besoin de sauter aux définitions. Pour les définitions, j'utilise des ctags comme le suggèrent d'autres réponses.
la source
Si vous utilisez des ctags comme d'autres affiches l'ont recommandé, assurez-vous de regarder le plugin taglist .
Assurez-vous de prendre le temps de lire les documents et d'apprendre les raccourcis clavier. En voici quelques-uns pour commencer (à partir de la fenêtre TList):
la source
Ctags exubérants.
Utilisez Ctrl-] pour accéder à la balise sous le curseur.
la source
J'utilise FindFile . Si vous ouvrez vim à la racine de votre projet et exécutez
:FC .
le plugin mettra en cache tous les noms de fichiers sous votre cwd. Vous pouvez alors faire:FF
pour ouvrir un menu de complétion et taper le nom du fichier que vous voulez (ou plutôt, les premières lettres).la source
FC .
dans votre:FF
répertoire racine, puis entrez, commencez à taper le nom de fichier que vous voulez et vous avez terminé. J'essaye toujours de comprendre comment lancer dans de nouveaux onglets ..:FC .
pour mettre en cache les fichiers dans ce répertoire.:FT
ou:FindTabNew
gist.github.com/1104884Ouverture à
vim
partir de la racine de votre fichier source et extension de l'path
option pour y inclure tous les sous-répertoires.Par exemple
set path+=/usr/include/c++/**
pour les en-têtes C ++ etset path+=**
pour votre répertoire source.Ceci ouvre alors une pléthore de possibilités suivantes.
1) Ouverture du fichier par nom ou par parties de celui-ci
Vous pouvez utiliser la complétion automatique et l'expansion générique de
:find
manière fiable. Vous tapez le nom, il localisera le nom. Cela fonctionne indépendamment de la langue. Je suis sûr que vous l'aimerez.2) Naviguer vers les fichiers sous cusror:
si vous voulez aller un chemin de fichier comme
#include "project/path/classA.h
.Ctrl- 6- pour revenir à la dernière position du curseur après
gf
ougF
3) Recherche d'API et navigation vers l'emplacement de l'API
[i
ou[I
peut être utilisé pour rechercher votre signature de fonction pour le mot sous le curseur sans quitter votre espace de travail.[<Tab>
pour aller réellement à la déclaration. Utilisez Ctrl- 6pour revenir au dernier emplacement.Sans étendre
path
, vous pouvez commencer à naviguer dans les fichiers par:Ex
commande et naviguer et ouvrir votre fichier. Je préfèreNerdTree
cependant.la source
Bien que j'espère un peu que quelqu'un me montrera une meilleure solution pour que je puisse apprendre quelque chose, NERDTree a été bon avec moi pour accéder à des fichiers spécifiques avec complétion de nom tant que l'arborescence est développée. La commande lorsque j'ai besoin d'accéder à un fichier est quelque chose comme:
, d / foo.pyo (où foo.py est un nom de fichier)
, d pour ouvrir l'arborescence, / pour entrer en mode de recherche, le nom (ou le nom partiel, ou regex, ou autre) du fichier, puis o pour ouvrir.
Bien sûr, vous devrez peut-être appuyer sur «n» plusieurs fois si vous n'avez pas tapé suffisamment de nom de fichier ou s'il y a des doublons.
J'admets que cela ressemble un peu à un hack d'utiliser NERDTree comme celui-ci, bien que cela soit si loin dans ma mémoire musculaire que je n'y pense même pas.
Bien sûr, j'utilise aussi des ctags, mais ceux-ci ne sont utiles que lorsque vous avez une fonction près du curseur et que vous devez accéder à sa définition dans un autre fichier ou quelque chose. Souvent, je dis "OK, j'ai besoin de travailler sur la fonctionnalité x maintenant" et j'ai besoin de naviguer vers un autre fichier sans aucune référence à proximité avec laquelle ctags aiderait vraiment.
la source
J'utilise deux de mes plugins:
<c-w><m-down>
par défaut. Vous voudrez peut-être vérifier le plugin renommé de liste de tags à la place.Les deux nécessitent ma bibliothèque viml lh-vim-lib.
la source
Essayez SourceCodeObedinece . Celui-ci que j'ai développé pour gérer le projet de fichiers source C ++ 1Gb.
Je l'utilise en paire avec 0scan .
Ces deux plugins sont des wrappers autour des outils de navigation Vim les plus populaires: ctags et cscope .
la source