Utiliser VIM comme éditeur externe pour FireFox avec Pentadactyl
Pour les amoureux de vim, s'il est une extension indispensable à FireFox, c'est bien Pentadactyl. Prolongement beaucoup plus poussé du célèbre Vimperator, cette extension permet d'utiliser le navigateur avec la même philosophie que votre éditeur préféré.
Mais, cerise sur le gâteau, Pentadactyl permet aussi d'utiliser VIM (ou tout éditeur externe) pour éditer n'importe quel champ texte sur n'importe quelle page web. C'est valable pour les commentaires, mais aussi pour la rédaction d'article, comme je le fait ici sous Drupal.
Ceci est bien sympathique mais implique l'ouverture d'une nouvelle instance de gVim par défaut. Tout le jeu ici est de changer cela pour utiliser plutôt l'éditeur déjà ouvert.
VIM serveur
Pour que cela fonctionne, la première étape est de basculer votre instance de VIM en mode serveur. Serveur ? Et oui serveur... VIM (ou gVim) est en effet capable de se mettre à l'écoute du réseau pour recevoir des ordres dont celui d'ouverture d'un fichier. Pour cela, il suffit juste de donner un nom à l'éditeur "cible" à son lancement :
gaston$vim --servername mon_vimlancement de VIM en mode serveur
Pas très compliqué hein :-). A partir de là, VIM est à l'écoute. Notez au passage que Vous pouvez ainsi lancer autant de VIM en mode serveur que vous le désirez et obtenir en obtenir la liste :
gaston$vim --serverlistMON_VIMMON_AUTRE_VIMListe des VIM en mode serveur
Petit détail, ce mode "serveur" utilise un socket UNIX et il ne semble pas possible d'accéder ainsi à un VIM distant (dommage ;-).
Donner des ordres au serveur
Maintenant, voyons comment donner des ordres à un serveur VIM comme ouvrir un fichier :
gaston$vim --servername mon_vim --remote ~/.bashrcDemander à un serveur VIM d'ouvrir un fichier
Si le serveur est bien lancé, le fichier doit s'ouvrir sur le bon éditeur et la commande doit vous rendre la main immédiatement.
Il est aussi possible d'envoyer des séquences de touches (--remote-send), ou encore d'évaluer une expression et d'obtenir son résultat (--remote-expr).
Ouvre et attend !
Ceci fait, dans le cadre de son usage avec Pentadactyl, le fait que la commande nous rende la main ne nous arrange pas car l'extension FireFox doit attendre la fin de l'édition du texte pour mettre à jour le champ correspondant. Pas de problème, c'est faisable :
gaston$vim --servername mon_vim --remote-wait ~/.bashrcDemander à un serveur VIM d'ouvrir un fichier et d'attendre sa fermeture
Cette fois ci, le fichier est ouvert mais la commande reste bloquée. Pour y contrevenir il faut détruire simplement le buffer ouvert à distance par la commande :bdelete (et pas seulement fermer la fenêtre par un :close. Ceci fait, la commande --remote-wait se termine.
De la théorie à la pratique
Reste maintenant à configurer Pentadactyl. Pour cela, il faut modifier la variable editor par la commande suivante :
:set editor='vim --servername mon_vim --remote-wait'Modification de l'éditeur externe de Pentadactyl
Ici nous n'indiquons pas le fichier à ouvrir, Pentadactyl l'ajoutera tout seul. Pour tester, allez sur une zone de texte sur n'importe quelle page web, et utilisez le raccourcis clavier Ctrl-I. Si tout c'est bien passé, la magie devrait fonctionner et un fichier vierge portant le nom /tmp/pentadactyl.txt devrait s'ouvrir dans votre éditeur. Si vous saisissez du texte et que vous sauver (:w!), le champ correspondant sera automatiquement mis à jour. Enfin lorsque vous avez fini, il suffit de sauver une dernière fois puis de saisir la commande :bdelete pour rendre la main à Pentadactyl.
Rendre tout cela définitif
Pour rendre ce réglage définitif, il nous faut ouvrir (ou le cas échéant créer) le fichier ~/.pentadactylrc et y ajouter la ligne suivante :
set editor='vim --servername mon_vim --remote-wait'configuration
Vous pouvez aussi utiliser dans le navigateur la commande :mkpentadactylrc! mais seulement si vous n'avez pas déjà un fichier de configuration que vous auriez customisé, sinon il sera écrasé !
Conclusion
Voilà, fin du petit tour de l'intégration entre ce fantastique Pentadactyl et VIM qui prouve une fois de plus qu'il est bien rare de trouver quelque chose que ce dernier ne se sache résoudre