Pour mon plugin Vim qui aide à écrire du markdown, j’ai envie d’une fonctionnalité pour mettre un mot en italique (et aussi en gras). Si j’ai le texte suivant:

foo bar baz

et que le curseur est dans le mot bar, je veux que la combinaison de touches <Leader>qi donne ceci:

foo *bar* baz

Pour implémenter ça, j’utiliserais encore le framework de test Vader.

Voici un premier test, pour le cas général:

Given (some text):
  abc def ghi jkl mno

Execute (starting in middle of a word):
  execute "normal! fe"
  QuickMarkdownItalic

Expect (2nd word in italic):
  abc *def* ghi jkl mno

Le bloc Execute place d’abord le curseur sur le caractêre e, autrement dit à l’intérieur du mot def. Il lance ensuite la fonction QuickMarkdownItalic qui devra faire le travail.

Dans le fichier plugin/quickmarkdown.vim, j’ajoute la nouvelle fonction:

command! QuickMarkdownItalic call quickmarkdown#italic()

Puis j’implémente la fonction de la manière la plus simple à laquelle je puisse penser:

function! quickmarkdown#italic()
  execute "normal! bi*\<Esc>ea*\<Esc>"
endfunction

Décodage: b place le curseur au début du mot. i*\<Esc> passe en mode insertion, ajoute un * et revient en mode normal. e place le curseur à la fin du mot. a*\<Esc> passe en mode insertion derrière le mot et ajoute un * puis revient encore en mode normal.

Cette fonction sera amenée à bouger une fois qu’on se sera occupé des cas particuliers. Ce sera pour une prochaine fois.

À demain.