Artisan Numérique

/développement/éditeur de texte/vim/firefox/pentadactyl/ 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 :

gastonvim --servername mon_vim
lancement 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 :

gastonvim --serverlist
MON_VIM
MON_AUTRE_VIM
Liste 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 :

gastonvim --servername mon_vim --remote ~/.bashrc
Demander à 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 :

gastonvim --servername mon_vim --remote-wait ~/.bashrc
Demander à 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