2010-08-02 12 views
4

Tout d'abord, j'étais sur le point d'écrire une longue liste d'instructions if/else dans vim et j'ai réalisé que 1) il y avait un meilleure façon de faire ce que j'essayais de faire et 2) SO serait mûr avec de l'aide sur le sujet. Alors! J'ai une variété de fichiers répartis sur les commeOuverture du fichier d'en-tête à un fichier source C/C++ avec vim de plusieurs répertoires et plusieurs extensions

foo/src/file01.C 
foo/src/file02.cc 
foo/src/file03.c 
foo/include/file01.hh 
foo/include/file02.h 
foo/include/file03.h 

Si vous remarquez que le C/H, cc/hh, c/h extension peut ou peut ne pas correspondre alors vous êtes désireux et je aimerais que vous plaisez Aidez-moi. J'ai regardé des choses comme the following vim scripts depuis le wiki de Vim pour "Commuter facilement entre la source et le fichier d'en-tête" et bien que je n'ai jeté que quelques heures dans a.vim sans succès, il ne semble pas que les autres fonctionneraient via les docs sur cette page. Alors, quelqu'un peut-il aider à faire ce travail? Un bon fil que j'avais était un sujet rapide How to Easily Switch between Header and Source, mais ne pouvait toujours pas le faire fonctionner.

Je suppose que ce que je veux vraiment, c'est comment éviter les multiples instructions if et utiliser la correspondance réelle pour faire ce que je veux. Je veux regarder dans un autre répertoire et rechercher un fichier d'en-tête du même nom avec n'importe quelle extension familière s'il s'agissait d'un fichier source C/C++, ou rechercher un fichier source d'une extension régulière s'il s'agissait d'un fichier d'en-tête. Merci de votre aide!

MISE À JOUR: Je veux spécifiquement ouvrir le fichier dans un nouvel onglet. Je vis sur les onglets vim!

Répondre

2

Je recommande d'utiliser le plugin FSwitch. https://github.com/derekwyatt/vim-fswitch Cela fait exactement ce dont vous avez besoin hors de la boîte. Il vaut mieux que a.vim de plus d'une façon, étant une réécriture de l'idée derrière a.vim.

Le lien que vous avez publié le présente également comme une solution. Je viens de l'installer dans ma configuration vim et il fait bien son travail.

Profitez-en.

0

IMO votre meilleure option est d'adopter des scripts existants pour utiliser :tabf au lieu de :e ou tout ce que les scripts utilisent maintenant pour ouvrir le fichier de contrepartie. Vous pouvez également essayer de rendre la modification configurable et la soumettre à l'auteur du script. (Je suis sûr que beaucoup trouveraient l'amélioration utile.)

Cela m'a rappelé un truc que j'ai utilisé il y a très longtemps. Au lieu de deviner où sont les fichiers source/en-tête correspondants, j'ai utilisé en haut du fichier un commentaire spécial contenant le chemin relatif au fichier de contrepartie. Le changement était aussi simple que de trouver le commentaire spécial, d'extraire le nom du fichier et de l'ouvrir. Le problème était similaire au vôtre en ce que les extensions de fichiers n'étaient pas prévisibles. Ma solution rationnelle était d'arrêter de deviner et de désigner explicitement les contreparties dans le code source. (Ce jour je l'aurais probablement essayé de mettre la table de relation dans un fichier externe avec un nom standard et rechercher dans VIM en utilisant le upward search.)

2

Juste pour vous assurer que j'utilisais la version la plus récente, je downloaded the latest a.vim script (2.18) et copié dans mon répertoire ~/.vim/plugin.

Vous pouvez définir certaines variables dans votre fichier ~/.vimrc pour obtenir a.vim afin de reconnaître d'autres extensions de fichier.

Pour obtenir les fichiers dans votre exemple pour correspondre à leurs suppléants j'ajouté ce qui suit à mon ~/.vimrc:

let g:alternateExtensions_C = "H,hh" 
let g:alternateExtensions_hh = "C" 

Ce sont des variables globales qui vous permettent de remplacer ce qui est déjà défini. Vous devrez définir les deux relations (elles ne fonctionnent pas dans les deux sens).

Vous pouvez voir ce que les applications actuelles sont en tapant:

:echo g:alternateExtensionsDict 

Si vous avez besoin de définir d'autres applications, suivre le même schéma. Ce qui vient après le trait de soulignement est l'extension de fichier que vous éditez. Ce qui est dans les guillemets doubles est une liste d'extensions alternatives séparées par des virgules.

let g:alternateExtensions_<ext> = "<list,of,alt,ext>" 

Si vous avez une structure de répertoire différent, vous pouvez définir les chemins de recherche en remplaçant la variable g:alternateSearchPath. ../src et ../include sont déjà inclus par défaut.

:echo g:alternateSearchPath 

Pour ouvrir le fichier dans un autre nouvel onglet:

:AT 

Par ailleurs, le script a.vim est assez bien documenté. Vous pourriez vouloir l'ouvrir et jeter un coup d'oeil. J'ai trouvé un paramètre ou deux que je ne connaissais pas et je l'utilise depuis des années, o)

J'espère que cela aide.

+0

Merci pour votre aide. Je vais y plonger dès que possible. – physicsmichael

0

Deux choses utiles

:he 'path' 
:he tabfind 

Alors vous feriez

:set path=../,/usr/include/,/home/buildagent/SDKROOT/mysdk/inc 
:tabfind error_codes.h 

pour ouvrir error_codes.h Exotic quelque part sans avoir à le préciser. Notez comment vim globbing est très flexible, de sorte que vous ne pourriez pas besoin mucht

:argadd ./**/*.[h,H] | tab sall 

ouvrira tous les fichiers d'en-tête dans le répertoire courant, quel que soit le nombre de niveaux de profondeur. Soyez prudent en exécutant cette commande sur un grand arbre ou avec des liens symboliques en dehors de l'arbre