Je travaille normalement avec 2 fenêtres, divisées verticalement.
Le problème que je voudrais résoudre est: sauter facilement d'avant en arrière à partir du fichier d'implémentation de l'en-tête <->
J'étudie, sans chance, 2 façons de procéder:
- Ouvrir un autre fichier dans la fenêtre actuelle : il existe de nombreuses façons de le faire, cependant, je ne trouve pas un moyen qui se souvienne où j'étais dans le fichier précédent (c'est-à-dire passer à l'en-tête, revenir en arrière, mais pas au même endroit où j'étais) ).
- Ouvrir un fichier alternatif dans l' autre fenêtre : C'est bien défini, car je ne travaille qu'avec 2 fenêtres, mais je n'ai pas les connaissances nécessaires pour le faire.
vim-windows
zach
la source
la source
:h line()
(solution générique): "Cette autocommande saute à la dernière position connue dans un fichier juste après son ouverture, si la marque" "est définie:: au BufReadPost * if line (" ' \ "")> 1 && ligne ("'\" ") <= ligne (" $ ") | exe "normal! g` \" "| endifRéponses:
Il y a trois étapes principales pour accomplir ce que vous demandez:
Pour trouver le nom de fichier alternatif, vous souhaitez décomposer le nom de fichier actuel en «racine» et «extension». Un moyen simple de le faire est:
Si vous savez que vous ne faites que basculer entre les fichiers
.h
et.cpp
, vous pouvez facilement changer l'extension de l'un à l'autre:Vous pouvez également créer un dictionnaire mappant les extensions connues à des extensions alternatives potentiellement valides. Ou utilisez
globpath()
pour obtenir toutes les alternatives possibles pour le fichier actuel:et choisissez le premier, ou autre chose. Je préfère l'
globpath
approche, avec quelques astuces supplémentaires que je décrirai plus tard. Une fois que vous avez choisi l'extension cible, formez le chemin cible complet:Vous pouvez maintenant ouvrir le fichier alternatif dans la fenêtre actuelle:
Ou utilisez
winnr()
pour obtenir le numéro de "l'autre fenêtre" (winnr("#")
c'est la fenêtre vers laquelle<C-W>p
sauter, ou vous pouvez la coder en dur si vous savez qu'elle sera toujours la même pour votre configuration) et faites quelque chose comme:Cela vous donne une solution vraiment basique pour ouvrir des fichiers alternatifs. Il y a quelques lacunes avec l'approche ci-dessus, car je l'ai écrite pour être simple et c'est un peu à l'improviste. J'ai écrit un plugin qui alterne le changement de fichier "comme je le voulais" (en parcourant tous les
globpath()
résultats disponibles ). Il résout certains des problèmes liés à la simplicité de ce qui précède, vous pouvez vérifier sa mise en œuvre si vous souhaitez en savoir plus.Enfin, le point "restaurer la position du curseur". Je l'ai gardé pour la dernière fois car il est orthogonal à la chose de commutation alternative (mon plugin ne le gère pas par exemple), mais vous pouvez le mettre dans votre fonction si vous voulez rouler le vôtre.
:help line()
a une autocommande qui est utile pour restaurer la position du curseur à l'endroit où il était lors de la dernière ouverture du fichier:Je mets juste ça, ou quelque chose de très similaire, dans mon
.vimrc
puisque je préfère le comportement tout le temps. Cependant, vous pouvez facilement mettre le code ailleurs.la source
Vous pouvez utiliser le plugin vim-fswitch avec la configuration suivante dans votre
.vimrc
fichier:Si vous tapez
<Leader>
(qui est\
par défaut) , suivie pars
un.hpp
ou.h
fichier, le plugin vérifie si une correspondance.cpp
,.cc
ou le.c
fichier existe:include
parsrc
dans le chemin du fichier courantsrc
dossier au dessus du fichier courantIl y a plus d'options que vous pouvez utiliser pour mieux adapter votre projet dans la documentation . Cela vous prendra quelques minutes, mais une fois que vous aurez bien compris, vous devriez l'aimer. Personnellement, je le trouve très flexible et extensible, en plus il fonctionne aussi bien pour de nombreux types de fichiers (.m, .h, .inl etc ...).
la source
Dans ton
.vimrc
Cela vous permet de vous déplacer rapidement entre les fenêtres, en utilisant simplement les touches de direction Ctrl et VIM de la ligne d'accueil. Ce qui est génial, c'est que vous avez une façon courante de passer à n'importe quelle fenêtre, y compris la fenêtre de correction rapide.
Pour basculer rapidement entre l'en-tête et la source que j'utilise,
vim-scripts/a.vim
trouvée ici: https://github.com/vim-scripts/a.vim , utilisez la:A
commande pour basculer.Note latérale => Si vous utilisez tmux, vous pouvez utiliser https://github.com/christoomey/vim-tmux-navigator pour basculer entre les fenêtres vim ou nvim et un terminal de manière transparente.
la source
Je vais juste partager ma version super rapide et sale ...
Configurer mes mappages; alt-o ouvre le fichier associé dans la même fenêtre, alt-shift-o s'ouvre dans un split ...
Ensuite, j'ai une fonction qui obtient la liste des fichiers associés. J'ai voulu le modifier pour couper le nom de fichier au premier point plutôt qu'au dernier, mais c'est toujours un exercice pour le lecteur.
Ma configuration .vimrc est parfois spécialisée par client; certains ont la source et les incluent dans des hiérarchies de dossiers séparées, certains les ont ensemble. Par défaut, je suppose qu'ils sont tous à proximité, mais si je dois chasser, je fournirai une fonction de remplacement comme celle-ci.
Ensuite, je regarde cette liste de fichiers pour trouver le fichier du tampon actuel et je passe au suivant dans la liste. Ce n'est pas souvent aussi simple qu'une paire .cpp / .h, souvent j'ai d'autres choses à considérer.
Et puis enfin les deux fonctions qui s'ouvrent soit dans la fenêtre courante soit font un split ...
Ma version de fractionnement place toujours les fichiers .cpp et .c dans un fractionnement inférieur, sinon fractionné par défaut (qui dans mon cas est supérieur).
la source