Lerm-IT

Blog traitant de technologies informatiques. Logiciel libre, AdminSys, DevOps et GNU/Linux !

15 Apr 2020

[VIM] Créer ses propres snippets Avec Ultisnips

Introduction

Il existe de nombreuses extensions pour gérer les snippets sous vim .

  • snipmate
  • xpTemplate
  • Ultisnips
  • etc.

J’utilise personnellement Ultisnips et cet article concerne cette extension.

Chacune de ces extensions est livré avec un certain nombre de snippet déjà configuré, mais il peut être nécessaire d’en configurer de nouveau. C’est ce que nous allons voir ici.

Configuration

Il existe plusieurs méthodes pour ajouter de nouveaux snippets à Ultisnips. Certains vous proposeront de créer un dossier Ultisnips et de créer des fichiers contenant vos snippets à l’intérieur 1.

Il existe néanmoins une méthode plus simple.

En effet en regardant un peu l’aide de Ultisnips nous constatons qu’il existe une commande UltiSnipsEdit. Pour afficher l’aide vous pouvez entrer cette commande dans vim

:help UltiSnips-commands

La commande UltiSnipsEdit est documenté comme ceci

The UltiSnipsEdit command opens a private snippet definition file for
the current filetype. If no snippet file exists, a new file is created.
If used as UltiSnipsEdit! all public snippet files that exist are taken
into account too. If multiple files match the search, the user gets to
choose the file.

Il convient donc d’ouvrir avec vim un fichier du type pour lequel nous souhaitons ajouter un snippet, exécuter cette commande et ajouter le code du nouveau snippet. Dans mon cas je souhaite ajouter un snippet pour les fichiers Markdown .

$ vim fichier.md
... dans vim
:UltiSnipsEdit

vim nous affichera à ce moment un fichier vide dans lequel nous pourrons créer nos snippets (surement ~/.vim/UltiSnips/markdown.snippets). Vous pouvez ajouter votre snippet dans ce fichier en suivant la syntaxe officielle. Vous pouvez accéder à l’aide sur la syntaxe via :help UltiSnips-basic-syntax.

Voici un exemple de snippet.

snippet hl "{{<highlight ..>}}..{{</highlight>}}" b
{{<highlight ${1}>}}
${2}
{{</highlight>}}
endsnippet

Ici je crée un snippet nommé hl dont la description est {{<highlight ..>}}..{{</highlight>}}. A l’exécution le snippet ajoutera le code définit entre snippet et endsnippet et positionnera votre curseur sur le premier champ à remplir ($1). Si vous appuyez sur la touche tab, vous serez positionné sur le second champ.

Note: La configuration de UltiSnips sera automatiquement rechargée à la sauvegarde du fichier. Vous n’avez pas à redémarrer vim.

Aller un peu plus loin

Pour aller un peu plus loin voici deux astuces qui vous permettront d'être plus à l’aise avec la création de snippets.

Le snippet usnip

Il existe un snippet nommé usnip qui crée automatiquement la structure d’un snippet au format UltiSnips. Voici ce qui est généré.

snippet Tab_trigger "Description" b

endsnippet

La configuration de l'éditeur

Par défaut quand vous entrez la commande UltiSnipsEdit l'éditeur de ferme votre document actuel pour ouvrir le fichier de configuration. Il est possible de changer de comportement pour ouvrir le fichier de configuration dans une nouvelle fenêtre (au sens vim du terme).

Ajouter ceci à votre vimrc.

let g:UltiSnipsEditSplit = 'context'

Conclusion

Si l’utilisation des snippets est très pratique sous vim, pouvoir les configurer suivant nos besoins est indispensable. J’espère que cet article vous aura permis de pouvoir le faire plus simplement.


  1. Créer des snippets manuellement ↩︎