Comment gérer les plugins VIM nativement
VIM est certainement l'un des éditeurs de texte les plus vénérés du monde Unix. Bien que sa courbe d'apprentissage puisse être assez raide lorsqu'elle est habituée à des éditeurs de texte plus traditionnels, son utilisation peut améliorer considérablement la productivité. De nombreux plugins sont disponibles pour l'éditeur; Presque toujours, leur code source est hébergé sur GitHub ou des plates-formes similaires basées sur GIT. Pour gérer de tels plugins, plusieurs gestionnaires de plugins tiers ont été développés à temps, tels que pathogène ou vim-plag, mais depuis la version 8 de l'éditeur, une façon native de gérer les plugins a été introduite.
Dans ce tutoriel, nous allons voir comment gérer les plugins VIM nativement à l'aide de packages.
Dans ce tutoriel, vous apprendrez:
- Comment vérifier la version VIM
- Comment gérer les plugins nativement
- Comment charger automatiquement les plugins
- Comment charger les plugins à la demande
Exigences et conventions logicielles utilisées
Présentation
VIM n'a pas besoin d'introductions: il est basé sur l'éditeur VI classique (VIM signifie littéralement pour V-amélioré), et est l'un des éditeurs de texte les plus emblématiques du monde Unix. Il y a beaucoup de VIM peut faire hors de la boîte (nous avons couvert les bases de l'éditeur dans ce tutoriel), mais ses fonctionnalités peuvent être étendues plus loin via des plugins. Plusieurs plugins sont disponibles pour VIM; La plupart du temps, leur code source est hébergé sur GitHub, et leur développement est géré via le système de contrôle de version GIT. Pour mieux les organiser et les intégrer dans l'éditeur, plusieurs «gestionnaires de plugins» ont été créés, tels que pathogène ou vim-plugged. Certains d'entre eux, comme les premiers, sont très simples: ce qu'ils font est essentiellement pour nous permettre d'héberger chaque plugin dans son répertoire dédié, qui est ajouté au chemin d'exécution VIM; D'autres, comme ces derniers, sont plus complexes et sont en mesure de gérer les plugins de la même manière que la façon dont les gestionnaires de package gèrent les packages logiciels sur les distributions Linux.
Depuis la sortie de la version 8, une façon native d'organiser les plugins a été introduite et intégrée dans VIM. Son approche est similaire à celle utilisée par l'agent pathogène. Voyons comment cela fonctionne.
Vérifier si VIM prend en charge les packages
La prise en charge des packages (c'est ainsi que la fonctionnalité est appelée), comme nous l'avons déjà dit, a été introduite à partir de la version 8 de VIM. La fonctionnalité doit être activée lorsque l'éditeur est compilé à partir de Source et presque certainement le binaire VIM disponible dans les référentiels de notre distribution Linux préférée a été construit de cette façon. Comment peut le vérifier?
Pour obtenir des informations sur la version de VIM que nous utilisons et les drapeaux avec lesquels il a été compilé, tout ce que nous avons à faire est de lancer la commande suivante:
$ vim --versionDans la sortie de la commande, nous pouvons facilement repérer les fonctionnalités disponibles, car elles sont précédées d'un «+» (les manquants sont précédés d'un «-», à la place). Ce que nous voulons vérifier, dans ce cas, c'est le statut du drapeau «packages». Comme vous pouvez le voir, dans ce cas, la version de VIM que j'utilise est 8.2, et la fonction est activée:
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Apr 22 2022 00:00:00)
Included patches: 1-4804
Modified by <bugzilla@redhat.com>
Compiled by <bugzilla@redhat.com>
Huge version without GUI. Features included (+) or not (-):
+acl +file_in_path +mouse_urxvt -tag_any_white
+arabic +find_in_path +mouse_xterm -tcl
+autocmd +float +multi_byte +termguicolors
+autochdir +folding +multi_lang +terminal
-autoservername -footer -mzscheme +terminfo
-balloon_eval +fork() +netbeans_intg +termresponse
+balloon_eval_term +gettext +num64 +textobjects
-browse -hangul_input +packages +textprop
++builtin_terms +iconv +path_extra +timers
+byte_offset +insert_expand +perl/dyn +title
+channel +ipv6 +persistent_undo -toolbar
+cindent +job +popupwin +user_commands
-clientserver +jumplist +postscript +vartabs
-clipboard +keymap +printer +vertsplit
+cmdline_compl +lambda +profile +vim9script
+cmdline_hist +langmap -python +viminfo
+cmdline_info +libcall +python3/dyn +virtualedit
+comments +linebreak +quickfix +visual
+conceal +lispindent +reltime +visualextra
+cryptv +listcmds +rightleft +vreplace
+cscope +localmap +ruby/dyn +wildignore
+cursorbind +lua/dyn +scrollbind +wildmenu
+cursorshape +menu +signs +windows
+dialog_con +mksession +smartindent +writebackup
+diff +modify_fname +sodium -X11
+digraphs +mouse -sound -xfontset
-dnd -mouseshape +spell -xim
-ebcdic +mouse_dec +startuptime -xpm
+emacs_tags +mouse_gpm +statusline -xsmp
+eval -mouse_jsbterm -sun_workshop -xterm_clipboard
+ex_extra +mouse_netterm +syntax -xterm_save
+extra_search +mouse_sgr +tag_binary
-farsi -mouse_sysmouse -tag_old_static
Organisation des forfaits
Le répertoire qui est utilisé comme racine pour les packages VIM sur les systèmes UNIX/Linux est ~/.vim/pack . Le répertoire n'existe pas par défaut, il doit donc être créé manuellement:
$ mkdir -p ~/.vim/packLes plugins ne doivent pas être directement placés dans ce répertoire racine: à l'intérieur de chaque répertoire trouvé sous . ~/.vim/Pack , VIM recherche un start et un opt < Subdirectory. Les plugins trouvés sous les premiers sont chargés automatiquement; Les personnes à l'intérieur du répertoire OPT, à la place, doivent être chargées manuellement.
Sachant cela, nous pouvons organiser nos plugins dans des «catégories». J'ai, par exemple, j'ai tendance à les organiser en trois catégories principales: «Colorschemes», «Syntaxe» et «autres», donc ce que je fais, c'est de créer les répertoires (et les sous-répertoires ):
$ mkdir -p ~/.vim/pack/{colorschemes,syntax,others}/{start,opt}La structure du répertoire créé par la commande ci-dessus est la suivante:
/home/egdoc/.vim/pack
├── colorschemes
│ ├── opt
│ └── start
├── others
│ ├── opt
│ └── start
└── syntax
├── opt
└── startLa configuration que nous avons utilisée dans l'exemple est complètement arbitraire. Vous pouvez organiser les plugins comme vous le souhaitez, vous pouvez peut-être créer un seul répertoire sous . ~/.vim/Pack et mettre tous les plugins sous ses sous-répertoires «Démarrer» ou «Opt» .
Chargement des packages automatiquement
Voyons un exemple: Supposons que nous voulons ajouter le plugin Nerdree à VIM (ces plugins ajoutent un explorateur de systèmes de fichiers très pratique à l'éditeur). Tout ce que nous avons à faire est de cloner le référentiel de plugin à l'intérieur du répertoire que nous voulons utiliser comme destination. En utilisant la configuration créée dans l'exemple précédent, car nous voulons que le plugin soit chargé automatiquement, nous pouvons le cloner sous le répertoire ~/.vim/pack/autres/start :
$ git -C ~/.vim/pack/others/start clone https://github.com/preservim/nerdtree
Dans l'exemple ci-dessus, nous avons exécuté Git avec l'option -c , afin de passer dans le répertoire spécifié avant d'exécuter la commande «Clone». C’est tout ce que nous avons à faire! Le plugin sera automatiquement chargé lorsque VIM démarre, après l'analyse de ~/.vimrc . Pour lancer l'explorateur de fichiers, nous pouvons entrer le mode de commande de l'éditeur et exécuter:
:NERDTreeTogglePackages de chargement à la demande
Parfois, nous pouvons vouloir charger certains plugins uniquement sur des cas spécifiques. Pour accomplir cette tâche, tout ce que nous avons à faire est de mettre le code du plugin dans un sous-répertoire «Opt». En collant à notre exemple précédent, si nous voulions que le plugin «Nerdtree» soit chargé à la demande, au lieu de cloner le référentiel dans le répertoire ~/.vim/pack/autres/start , nous aurions cloné inside ~/.vim/pack/autres/opt :
$ git -C ~/.vim/pack/others/opt clone https://github.com/preservim/nerdtreeAvec le plugin en place, pour le charger à l'intérieur de VIM, nous devons utiliser la commande packadd et passer le nom du répertoire contenant le plugin que nous voulons charger comme argument . Dans notre cas, en mode commande VIM, nous exécutions:
:packadd nerdtreeEn tant qu'alternative, nous pouvons «scripter» la charge du package lorsqu'une certaine condition est remplie dans notre fichier de configuration VIM. À titre d'exemple trivial, imaginez que nous voulons charger le plugin uniquement lorsque vous utilisez VIM sur Linux:
if has('linux')
packadd! nerdree
endifDans l'exemple ci-dessus, vous pouvez voir comment, en utilisant le langage de script VIM, nous avons utilisé la fonction a() intégrée pour tester si une fonctionnalité est disponible. Dans le cas où la fonction renvoie 1, cela signifie que la fonctionnalité spécifiée est disponible. Dans ce cas, nous avons testé si l'exécution de la version Linux de VIM: Si c'est le cas, nous chargeons le plugin «Nerdtree» à l'aide de la commande packAdd . Pourquoi nous avons utilisé un ! Après la commande dans l'exemple ci-dessus? Alors que généralement sur les plugins VIM sont chargés après l'analyse du fichier de configuration, lorsque nous exécutons la commande «PackAdd», le plugin spécifié est chargé immédiatement. Pour retarder le chargement du plugin, nous pouvons utiliser la marque d'exclamation comme nous l'avons fait ci-dessus, afin que le répertoire du plugin soit ajouté au chemin d'exécution VIM , mais le plugin lui-même est chargé pendant l'initialisation, comme elle arriverait normalement.
Conclusions
VIM peut être étendu par l'utilisation de plugins qui, dans la majorité des cas, sont hébergés sur github. Bien que plusieurs gestionnaires de plugins soient disponibles, depuis la version 8, VIM prend en charge une façon native de les gérer, qui est appelée «packages». L'éditeur prend en charge le chargement des plugins automatiquement ou à la demande. Dans ce tutoriel, nous avons vu comment profiter de cette fonctionnalité.
