Utiliser VIM comme éditeur externe pour FireFox avec Pentadactyl
Le 16 février, 2012 - 00:10 | Ulhume

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_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 :

gaston$vim --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 :

gaston$vim --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 :

gaston$vim --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

Vos remarques et commentaires...

casper, le 16 février, 2012 - 10:49

Salut Ulhume,

Si tu aimes les raccourcis Vim et les navigateurs rapide, uzbl est ton ami (http://uzbl.org/)

Bien à toi.

Ulhume, le 16 février, 2012 - 16:48

Je suis allé voir la page du projet (que je ne connaissais pas), et... j'ai rien compris :) C'est quoi exactement, un navigateur épuré comme jumanji (http://pwmt.org/projects/jumanji) ? Si c'est le cas, je suis bloqué avec Firefox à cause de FireBug qui fait parti des outils indispensables pour mon boulot. C'est pour cela d'ailleurs que j'étais bien content d'avoir trouvé pentadactyl.

William, le 17 février, 2012 - 17:33

C'est à peu près Jumanji oui (je n'arrive même pas à leur trouver de différences). Après on sera d'accord, la puissance et la modularité de Firefox couplé à Pentadactyl m'empêchent aussi de passer à des navigateurs plus légers tels que uzbl ou jumanji.

casper, le 20 février, 2012 - 16:20

http://www.uzbl.org/wiki/michaelraskin

...
# Micro hack-scripts for comfortable browsing/development
@bind 'fbug' @nowu js var firebug=document.createElement('script');firebug.setAttribute('src','http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');document.body.appendChild(firebug);(function(){if(window.firebug.version){firebug.init();}else{setTimeout(arguments.callee);}})();void(firebug);
...

Bon, après je me doute que la version "lite" ne doit peut être pas remplir toutes tes exigences.
Mais avec des navigateurs hautement configurable comme celui-ci on peut pas mal de chose.

Ulhume, le 20 février, 2012 - 18:24

FB-Lite a deux problèmes. 1/ c'est plus lent que FireBug (qui est déjà terriblement lent). 2/ il n'accepte pas les extensions de firebug dont firepicker qui pour moi est incontournable.

Maintenant au point où j'en suis de changer mes habitudes, une option possible serait de me passer totalement de firebug en déportant cela sur VIM pour qui je me suis fait un colorpicker et qui dispose d'une excellent gestion des css (si on l'aide un peu avec TagList/ctags). Reste après le fait de pouvoir recharger les feuilles de style d'un site sans recharger la page et ce de manière externe (en ligne de commande). Avec cela, se passer de FB doit logiquement être faisable.

A tester donc.... En tout cas merci pour les pointeurs.

EDIT: peut-être un début de solution : http://aboutcode.net/vogue/

Publier un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <div> <p> <br>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

CAPTCHA
Cette question est là pour déterminer si vous êtes humain ou pas...