Chercher remplacer dans tous les buffers de vim

J'ai plusieurs fois eu besoin de faire des substitutions dans tous les fichiers ouverts dans vim. J'avais cherché dans les flags de la commande substitute (:s) sans succès et donc systématiquement je contournais le problème à coup de lignes de bash à base de find, sed, grep et compagnie. Mais je suis tombé par hasard sur la commande :bufdo en cherchant à corriger quelques petits bugs dans eZVim le plugin vim pour eZ Publish. Du coup rien de compliqué, il suffit de préfixer toute commande par bufdo pour l'appliquer sur tous les buffers ouverts, par exemple :

:bufdo! %s/cherche/remplace/g

Le point d'exclamation permet de forcer le passage d'un buffer à un autre sans sauvegarder son contenu. Et évidemment ça marche pour autre chose que la substitution. Il est également possible d'exécuter plusieurs commandes sur chacun des buffers en les séparant avec un pipe (|), par exemple pour corriger une indentation en fonction des réglages de vim, supprimer les espaces inutiles en fin de ligne et sauvegarder le fichier, la ligne suivante devrait faire l'affaire :

:bufdo retab | %s/  *$//g | w

Il existe également :tabdo (pour les onglets), :windo (pour les fenêtres vim) et :argdo (pour les arguments de la ligne de commande).

Le bug de l'espace supplémentaire...

Depuis près de deux ans et demi, j'avais un bug assez énervant qui faisait que tous les liens insérés dans un bloc de texte riche était systématiquement suivi d'un espace lors du rendu ce qui est particulièrement gênant avec la ponctuation qui se retrouve parfois sur la ligne suivante. Depuis quelque temps j'étais persuadé qu'il s'agissait d'un bug d'eZ Publish lié au fait que j'avais fait un override du template content/datatype/view/ezxmltags/link.tpl en le plaçant dans le design de mon site.

Aujourd'hui, j'ai refait quelques tests sur le code Planet eZ Publish.fr qui souffrait du même problème. J'ai découvert que le problème ne venait pas de la surcharge directement, mais de l'édition du template avec vim qui, par défaut, insère systématiquement un caractère fin de ligne (EOL) sur la dernière ligne d'un fichier et ce caractère qui apparaissait comme un espace. Ceci explique aussi les messages de diff/svn diff indiquant qu'un caractère fin de ligne a été ajouté ou supprimé selon les cas.

Il est heureusement possible de désactiver ce comportement en ajoutant les lignes suivantes dans sa configuration de vim :

au BufWritePre * :set binary | set noeol
au BufWritePost * :set nobinary | set eol
Tags : eZ Publish, ViM, Template

eZVim is back !

And eZVim is not dead ! I've just released a new version of eZVim, the vim plugin for eZ Publish. This version brings some new important features :

  • Quick documentation search : ALT-D on any word in a template file will search for this word in the online documentation
  • Specific syntax highlighting for eZ Publish templates instead of the Smarty one used by default (based on it by the way)
  • Specific syntax highlighting for eZ Publish ini files and overrides (instead of the dosini syntax file for *ini files and the PHP one for *.ini.append.php files)
  • The class view sidebar now depends on the eZDevtools extension instead of SmileClasses. eZDevtools is a rewrite of SmileClasses for eZ Publish 4.x. You only need it to use the class view sidebar.

For more (download, setup, documentation, ...), please visit the project page.

Tags : eZ Publish, eZVim, ViM

Faire une présentation avec l'extension Firefox Fullerscreen

À la fin de la semaine, je dois faire une présentation dans le cadre professionnel sur une partie de mon travail autour d'eZ Publish. Mon contenu est prêt, il me reste donc à choisir les outils que je vais utiliser pour créer mes slides. Je ne suis clairement pas un fan des outils a la OpenOffice Impress ou Powerpoint. J'ai plutôt cette vieille habitude (qui semble bizarre de nos jours) de vouloir taper mes textes quelque soit leur sortie final avec mon éditeur de texte préféré.

Suivant régulièrement le Glazblog, je connais l'extension Fullerscreen mais je n'avais jamais pris le temps de l'essayer. Je l'ai donc installée, j'ai regardé la démonstration et je me suis mis à faire ma présentation en XHTML. C'est du XHTML très simple puisque la plupart des slides se résument quelques titres et sous-titres, quelques listes et des paragraphes et on bénéficie de toutes les facilités de mises en page des CSS surtout qu'on a pas à se soucier de navigateurs un peu en retard sur ce point...

Finalement, le seul point un peu difficile pour moi a été l'insertion d'un numéro de page sur chaque slide. Au départ, je voulais utiliser les compteurs en CSS, mais il semble que ça ne puisse pas marcher puisque l'extension modifie la propriété display de chaque div servant de slide à none ce qui fait qu'en mode projection, le compteur reste constamment à un. J'ai donc été obligé d'insérer une petite fonction javascript comptant le nombre de div servant à l'insertion du compteur. À mon avis, il serait intéressant que cette fonctionnalité soit ajouter directement dans l'extension à moins qu'il existe déjà un moyen que je n'ai pas trouvé.

Si ça intéresse quelqu'un je met à disposition un modèle de présentation assez basique très inspiré de l'ancien style du site eZ.no encore utilisé sur projects.ez.no :

 

 

Quelques trucs avec ViM #2

Voici la suite du billet Quelques trucs avecViM #1 qui, comme le suggèrait le #1, a bien une suite :) Voici donc 3 petits trucs qui me simplifient la vie presque tous les jours. Note : les captures d'écran sont des GIF animés, il est possible de les revoir en cliquant dessus pour faire apparaître la page dédiée à l'image.

Mise en valeur de la ligne courante

Une fonctionnalité que l'on voit dans beaucoup d'éditeurs de texte avancés ou IDE est la mise en valeur de la ligne courante. Depuis vim 7, disponible depuis Ubuntu Edgy Eft, cette fonctionnalité est directement dans l'éditeur. Dans un terminal, la ligne est soulignée alors que dans la version graphique, il est possible de définir une couleur de fond, pour ma part, j'utilise les lignes suivantes dans mon .gvimrc pour avoir une ligne légèrement surlignée de bleu/gris dans la version graphique uniquement :

 

set cursorline
hi CursorLine guibg=#e7ebff

 

Les folds sur mesure

Beaucoup d'éditeurs proposent la possibilité de "pliage/dépliage" (fold/unfold) des structures de contrôle et/ou des commentaires. Il est possible de faire la même chose dans vim mais j'apprécie assez peu cette fonctionnalités. Par contre, il est possible de définir des zones "pliables" sur mesure ce qui peut être pratique pour être à deux endroits éloignés dans le code sans ouvrir deux buffers sur le même fichier. Pour commencer à l'utiliser, le plus simple est de passer en mode visuel en tapant v depuis le mode commande, de sélectionner quelques lignes de texte avec les déplacements habituels et puis de faire zf pour créer la zone pliée. Pour la déplier, il suffit de taper zo (Fold Open), pour la replier zc (Fold Close). Si on n'a plus besoin de la zone, on peut faire zd (Fold Delete) pour supprimer la possibilité de pliage/dépliage, le texte reste intact. Il est possible d'avoir un repère visuel où des zones pliables sont positionnées en fixant la variable foldcolumn, par exemple à 2 en tapant ":set foldcolumn=2", ce qui donne :

Les zones sont imbricables et beaucoup de raccourcis existent pour les manipuler. Plus d'informations le folding dans l'aide de vim.

Les abbréviations

Lorsqu'on écrit du code, on utilise régulièrement les mêmes constructions syntaxiques, il peut être avantageux de définir des abbréviations permettant de taper rapidement ces séquences. Dans eZVim, un plugin vim pour eZ Publish, j'en définis quelques unes, par exemple :

 

iabbrev ezfe {foreach __ as $k => $val}<CR><CR>{/foreach}
match Error / __ /

 

La première ligne indique à vim de remplacer la chaîne ezfe suivie d'un espace par le reste de la ligne (foreach) en mode insertion. <CR> représente une frappe sur la touche "Entrée". La seconde ligne dit à vim de reconnaître la chaîne " __ " comme une erreur ce qui permet de voir rapidement les points à complèter dans ce qui vient d'être inséré pour obtenir un code syntaxiquement correct :

Plus d'informations sur les abbréviations dans l'aide de vim.

Tags : Truc, ViM, Ubuntu, Linux

Flux RSS des billets

Flux RSS des billets

Rechercher sur pwet.fr

À retenir

Derniers commentaires

Archives

Nuage de tags

Bioutifoul photos

Quelques liens

Licence d'utilisation

Contenu sous Licence Creative Commons By-Sa

Sauf mentions spécifiques, les billets et les photos publiés sur ce site sont placés sous la licence Creative Commons by-sa.

Pour toute utilisation dépassant le cadre de cette licence, merci de me contacter par e-mail.