HervéRenault.fr

UltiSnips en action

Mon aide-mémoire UltiSnips

UltiSnips est un plugin très utile de Vim, qui permet d'insérer des snippets, des "bouts de code" qui sont répétitifs à saisir. Par exemple, une boucle foreach en PHP ou une balise img en HTML. Mais pour bien l'utiliser, il faut connaître quelques combinaisons de touches supplémentaires. Pour ne pas les oublier entre deux utilisations, je les note ici.

Insérer le snippet Saisir par exemple img puis Tab
Note : il faut un espace ou autre séparateur devant img, sinon par exemple <span>img n'est pas reconnu comme déclencheur
Lister les snippets avant d'insérer Saisir par exemple img puis Ctrl Tab
UltiSnips va proposer les snippets img img# avec un attribut id et img. avec un attribut class

Problème : mon terminal XFCE intercepte Ctrl Tab donc ça marche dans Gvim mais pas dans Vim 🙄 donc j'ai ajouté dans mon .vimrc let g:UltiSnipsListSnippets = '<S-Tab>'

Passer au champ suivant du snippet Ctrl j
Passer au champ précédent du snippet Ctrl k
Effacer le champ entier Touche Retour arrière (Backspace)
Pour le HTML, insérer la valeur dans un attribut Si l'attribut est pré-rempli et pré-selectionné par UltiSnips, par exemple target="_blank", et si je veux changer juste la valeur _blank, je ne peux pas commencer à saisir sinon j'efface aussi target=…
Dans ce cas :
  • Echap pour repasser en mode normal
  • ci" pour remplacer la valeur entre guillemets
  • puis Ctrl j pour continuer normalement avec UltiSnips
Note : ça va dépendre du snippet. Par exemple, le snippet img, dans la version que j'ai, permet de faire Ctrl j pour sélectionner alt="" et éventuellement l'effacer en bloc, puis Ctrl j à nouveau pour entrer dans les guillemets.
Coller du texte "externe" dans un champ proposé par UltiSnips Par exemple, pour coller une URL dans l'attribut href d'une ancre, si cette URL a été copiée hors de Vim dans un logiciel tel que Firefox :
  • Ne pas utiliser le Maj Ctrl v du terminal sinon ça interrompt UltiSnips
  • Utiliser Ctrl r + (le registre + correspond dans Vim au "presse-papier" de X11)
  • On ne peut pas utiliser p puisqu'on est en mode insertion
  • puis Ctrl j pour continuer normalement avec UltiSnips
Mettre un snippet autour de la sélection Par exemple, on a saisi le texte "https://hervérenault.fr/" et on voudrait transformer ce texte pur en lien :
  • sélectionner ce texte (v)
  • le remplacer (c)
  • saisir a
  • Tab pour lancer UltiSnips, qui pré-sélectionne l'URL par défaut
  • coller le texte par Ctrl r " (le registre " est le registre par défaut)
    • pas par p puisqu'on est en mode insertion
    • pas avec le Maj Ctrl v du terminal sinon ça interrompt UltiSnips
  • continuer à remplir les autres champs avec UltiSnips par Ctrl j
Mettre autour de la sélection un snippet qui utilise ${VISUAL} Par exemple, le snippet p utilise ${VISUAL} de cette manière : <p>${0:${VISUAL}}</p> Dans ce cas, on peut simplement
  • sélectionner le texte qu'on veut entourer d'une balise paragraphe (v)
  • faire Tab pour invoquer UltiSnips
  • saisir p

Ce n'est pas très pratique parce qu'il faut savoir quel snippet a cette possibilité. La méthode précédente est plus générale, elle fonctionne dans tous les cas.

Pour voir les snippets disponibles, c'est dans ~/.vim/bundle/vim-snippets/UltiSnips/

Pour créer ses propres snippets, c'est dans ~/.vim/UltiSnips/

Et pour le reste, il y a toujours :help ultiTab