mageekblog Le blog personnel de Frédéric Hardy. Au menu, PHP, agilité, FreeBSD, cuisine et photographies.

Aller au contenu | Aller au menu | Aller à la recherche

cv | twitter | linkedin subversion atoum

Cadeau de noël pour les utilisateurs de VIM

J'ai souvent des commandes à exécuter lorsque je développe, comme par exemple :

#php symfony phpunit:unit path/to/test/file.php

Jusqu'à récemment, j'avais ajouté la ligne suivante à mon .vimrc pour ne pas avoir à sortir de VIM pour exécuter ce type de commande :

nnoremap <F12> :!php symfony phpunit:unit % 2>&1 \| more<CR> 

Ainsi, en appuyant sur la touche F12 de mon clavier, je déclenchais l'exécution du fichier de tests en cours d'édition.

Cette solution fonctionne, mais à quelques inconvénients induit par le fait que le résultat de la commande n'est pas affiché dans une fenêtre de VIM :

  1. Il n'est pas possible de conserver ou éditer les résultats de la commande.
  2. Si plusieurs tests ne passent pas, la sortie de la commande peut être très longue.

Bref, à l'usage, ce n'est pas le plus pratique.

La solution consiste donc à injecter le résultat de la commande dans un buffer afin de l'avoir dans une fenêtre et ainsi disposer de l'ensemble des commandes de VIM pour le manipuler.

Sur la base de cette astuce, j'ai donc ajouté à mon .vimrc le code suivant :

let s:_ = ''

function! s:ExecuteInShell(command, bang)
let _ = a:bang != '' ? s:_ : a:command == '' ? '' : join(map(split(a:command), 'expand(v:val)'))

if (_ != '')
let s:_ = _
let bufnr = bufnr('%')
let winnr = bufwinnr('^' . _ . '$')
silent! execute winnr < 0 ? 'new ' . fnameescape(_) : winnr . 'wincmd w'
setlocal buftype=nowrite bufhidden=wipe nobuflisted noswapfile nowrap number
silent! :%d
let message = 'Execute ' . _ . '...'
call append(0, message)
echo message
silent! redraw
silent! execute 'silent! %!'. _
silent! execute 'resize ' . line('$')
silent! execute 'au BufUnload <buffer> execute bufwinnr(' . bufnr . ') . ''wincmd w'''
silent! execute 'nnoremap <silent> <buffer> <LocalLeader>r :call <SID>ExecuteInShell(''' . _ . ''', '''')<CR>'
silent! execute 'nnoremap <silent> <buffer> <LocalLeader>g :execute bufwinnr(' . bufnr . ') . ''wincmd w''<CR>'
endif
endfunction

command! -complete=shellcmd -nargs=* -bang Shell call s:ExecuteInShell(<q-args>, '<bang>')

La commande suivante me permet donc maintenant d'exécuter la commande de mon choix et d'en obtenir le résultat dans une fenêtre :

:Shell php symfony phpunit:unit %

Cerise sur le gâteau, s'il existe déjà une fenêtre de résultat pour cette commande, elle sera réutilisée, afin de ne pas multiplier inutilement les fenêtres de résultat.

Et enfin, il est possible d'exécuter à nouveau la commande à partir de la fenêtre de résultat en tapant <localleader>r en mode normal, ou bien à l'aide de la commande :Shell!.

Et comme le code évolue rapidement, à tel point que je suis en train de me dire qu'en faire une extension serait intéressant, je vous conseille d'aller consulter mon .vimrc.

Le forum PHP 2010, c'est dans deux jours !

Et comme je l'ai déjà indiqué ici, j'y donnerais cette fois encore une conférence, au sujet d'une des fonctionnalités les moins connues et utilisée de PHP, à savoir les archives PHAR.

Je tâcherais donc lors de mon speech de vous donner l'envie d'utiliser ces archives, car leur potentiel est largement plus que sous-exploité au sein de la communauté PHP, qu'elle soit française ou étrangère.

Et comme cette "sous-exploitation est induit à la fois par une méconnaissance du sujet autant que par le fait que PHP 5.3 ne soit pas encore devenu la référence sur les serveurs de développement et de production, j'espère également vous donner l'envie de franchir le pas en vous faisant découvrir l'une des choses qui en font une version incontournable.

Lire la suite...

Premier jour !

Depuis deux jours sur Lyon, j'ai pris ce matin mes fonctions d'architecte logiciel chez PMSIpilot, après un voyage délicat samedi, grâce à la SNCF.

Cependant, Sarah et Sébastien m'ont vite fait oublier les péripéties de ma transhumance, puisqu'il m'ont fait la joie de m'accueillir lors de mon arrivé à Lyon, et que nous avons passé ensemble une très bonne soirée devant un hamburger gargantuesque, après avoir fait une visite touristique pour me faire découvrir (partiellement) la ville.

Aujourd'hui, J'ai fais avec plaisir la connaissance de mes nombreux collègues en général et des membres de mon équipe de développement en particulier, et j'ai pu enfin mettre un visage sur des gens que je connais depuis longtemps (ou pas) sur Internet, comme @ubermuda, par exemple.

J'ai de plus configuré mon poste de travail, et c'est d'ailleurs une petite révolution pour moi, car je travaillais depuis des années sur un ordinateur portable sous FreeBSD, et je me retrouve maintenant sur un ordinateur de bureau sous Ubuntu, avec un vrai clavier et surtout deux écrans, sans parler de l'utilisation de PHPStorm à la place de vim pour le développement.

J'ai également eu droit à la présentation des logiciels développés par la société, afin de pouvoir commencer à travailler dans de bonnes conditions sur le projet auquel je vais participer et dont la phase de conception va débuter dans les jours qui viennent.

Tout cela pour dire que le rythme de publication de ce blog peut potentiellement se ralentir dans les jours ou semaines qui viennent, vu que je vais avoir moins de temps à y consacrer, n'étant plus chômeur.

De plus, il va également falloir que j'organise la vente de ma maison et mon déménagement de Tourcoing à Lyon.

Je suis de plus pour l'instant sans accès à Internet en dehors des locaux de PMSIpilot, ce qui complique encore les choses.

Enfin, j'ai l'impression que mes soirées vont être bien remplies au vu de ce que prépare mes collègues...

Pour autant, je ferais tout pour tenir le rythme des 10 jours en ce qui concerne les billets au sujet du développement de la prochaine version majeure de PHP, ainsi que pour le développement d'Atoum, qui progresse même si je souhaiterais pouvoir aller plus vite.

Je serais à nouveau conférencier au forum PHP 2010

Pour la deuxième année consécutive, l'une de mes propositions de conférence pour le forum PHP 2010 qui aura lieu à Paris les 9 et 10 novembre 2010 à la Cité des Sciences et de l'Industrie a été retenue.

forumPHP2010.png

Lire la suite...

Forum PHP 2009

Comme l'année dernière, je serais au forum PHP, mais cette fois-ci en tant que conférencier.

J'y présenterais avec mon collégue Matthieu Valleton de chez no parking une conférence à propos de VIM.

Si vous n'êtes pas un fan d'emacs ou d'eclipse vous avez envie de découvrir la face cachée d'un éditeur gratuit, puissant et léger, alors, nous nous retrouverons le 12/11/2009 entre 14 h et 15 h.

Et pour les plus masochistes curieux, les fichiers utilisés pour la première mouture de cette conférence et sur lesquels nous nous appuierons pour la conférence du forum sont déjà disponibles.

- page 1 de 2