De temps en temps, tout en travaillant sur plusieurs projets, et / ou quoi que ce soit, cela me laisse (trop) de nombreuses instances de Vim ouvertes - comme cela arrive, j'ouvre un fichier qui est déjà ouvert ailleurs, me laissant avec l'option de:
[O]pen Read-only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort
Y a-t-il un moyen intégré pour augmenter l'instance, comme dans l'interface graphique / terminal, contenant le fichier ouvert? Idéalement, mettre le fichier en question au premier plan (si plusieurs tampons).
À partir de maintenant, j'utilise un script bash qui extrait le PID du swap, vérifie si ce PID appartient à Vim, et si oui, l'utilise wmctrl
pour ouvrir la fenêtre. Bien que cela fonctionne bien, au moins pour l'interface graphique et sur X11 Linux, je demande s'il existe une méthode plus native.
Réponses:
Une solution serait d'utiliser une seule instance de vim par projet, ce qui éviterait ce problème à moins que vos projets multiples aient des fichiers qui se chevauchent.
Je vais supposer que vous recherchez une solution automatisée, au lieu d'une suggestion sur la modification de votre comportement.
Il existe la possibilité d'une autre solution dans FocusLost plus native de vim.
L'événement de commande automatique FocusLost fonctionne dans GUI Vim et dans certains terminaux de console. Vous pouvez, au lieu de basculer vers le fichier dans la version de vim qui est ouverte (ce qui, si vous utilisez plusieurs fenêtres gui est désordonné), persister toutes les modifications qui n'ont pas été écrites dans l'autre instance de vim ne sont pas perdues (un branche git distincte, enregistrez puis annulez pour qu'elle soit dans l'arborescence d'annulation, ou enregistrez-la simplement) et ouvrez-la dans la nouvelle instance avec une indication qu'elle a été ouverte auparavant.
Un autre événement de commande automatique potentiellement utile, disponible dans vim 7, est SwapExists , qui indique qu'un fichier d'échange existe pour le fichier, c'est-à-dire qu'il est ouvert.
Si vous avez tout conservé dans tmux ou dans l'écran, il existe probablement un moyen de basculer vers la fenêtre / le volet approprié.
Une brève recherche dans github fait également apparaître https://github.com/lynnard/editexisting.vim qui semble fonctionner pour des gestionnaires de fenêtres spécifiques comme Xmonad.
la source
Longtemps perdu et presque oublié.
Destiné à re-factoriser le code, etc. mais le post est tel quel. Ce code est utilisé sur un système 32 bits. Je ne sais pas comment cela se comporterait sur 64 bits (ou autre).
Ayez également un hack dans le code C (extraction du PID).
Laissez-le comme un post que n'importe qui peut pirater et modifier. Mon script actuel dans son ensemble (en utilisant
pid
comme option, il devrait fonctionner sur n'importe quelle interface graphique étant donné que c'est "GUI-PID / Program" et l'utilisation dewmctrl -l -p
etc.):la source