Aller au contenu principal

☑️ Aperçu général

Cet aperçu couvrira les éléments de base pour :

  1. Oh-My-Zsh & Prezto
  2. Complétions
  3. Mode turbo
  4. Ice modifiers (Modificateurs de glace)

Chargement des plugins et des snippets

zi load z-shell/H-S-MWzi light zsh-users/zsh-syntax-highlighting

Les commandes ci-dessus montrent deux façons de charger un plugin de base. Si vous voulez sourcer des fichiers locaux ou distants (en utilisant une URL directe), vous pouvez le faire avec le snippet ``.

zi snippet <URL>

De telles lignes doivent être ajoutées à .zshrc. Les snippets sont mis en cache localement, utilisez l'option -f pour télécharger une version fraîche d'un snippet, ou zi update {URL}. Utilisez zi update --all pour mettre à jour tous les snippets et plugins.

L'utilisation de load entraîne l'activation du reporting - vous pouvez suivre ce que fait le plugin, afficher les informations avec zi report {plugin-name} et ensuite également décharger le plugin avec zi unload {plugin-name}.

L'utilisation de light est un chargement nettement plus rapide sans suivi ni rapport, en utilisant lequel l'utilisateur renonce à la possibilité de voir le rapport du plugin et de le décharger.

Utilisation de load ou light.

zi load  <repo/plugin> # Chargement avec rapport/enquête.zi light <repo/plugin> # Chargement sans rapport/enquête.

Plug-in de recherche historique multi-mots chargé avec enquête:

zi load z-shell/H-S-MW

Deux plugins ordinaires ont été chargés sans enquête :

zi light zsh-users/zsh-autosuggestionszi light z-shell/F-Sy-H

Extrait:

zi snippet https://gist.githubusercontent.com/hightemp/5071909/raw/
remarque

En mode Turbo, le ralentissement causé par le suivi est négligeable...

Oh-My-Zsh, Prezto

Pour charger les plugins Oh-My-Zsh et Prezto, utilisez la fonction snippet . Les snippets sont des fichiers uniques téléchargés par curl, wget, etc., la détection automatique de l'outil de téléchargement étant effectuée, directement à partir de l'URL :

zi snippet 'https://github.com/robbyrussell/oh-my-zsh/raw/master/plugins/git/git.plugin.zsh'zi snippet 'https://github.com/sorin-ionescu/prezto/blob/master/modules/helper/init.zsh'

De même, pour Oh-My-Zsh et Prezto, vous pouvez utiliser les raccourcis OMZ: : et PZT: : :

zi snippet OMZ::plugins/git/git.plugin.zshzi snippet PZT::modules/helper/init.zsh

De plus, les snippets supportent le protocole subversion, supporté également par Github. Cela permet de charger des extraits qui sont multi-fichiers (par exemple, un module Prezto peut être constitué de deux ou plusieurs fichiers, par exemple init.zsh et alias.zsh).

Les fichiers par défaut qui seront sourcés sont : *.plugin.zsh, init.zsh, *.zsh-theme:

L'URL pointe vers un répertoire :

zi ice svnzi snippet PZT::modules/docker

Snippets et performance

L'utilisation de curl, wget, etc. avec Subversion permet d'éviter presque complètement le code dédié à Oh-My-Zsh et Prezto, ainsi qu'à d'autres frameworks. Cela permet d'améliorer les performances de ZI, qui est très rapide et compact (faible empreinte mémoire et temps de chargement court).

Ice modifiers (Modificateurs de glace)

La commande zi ice fournit ice modificateurs pour la commande unique suivante.

La logique est que "la glace" est quelque chose qui est ajouté, par exemple à une boisson ou à un café, et dans le sens ZI, cela signifie que la glace est un modificateur ajouté à la prochaine commande ZI, et aussi quelque chose qui fond, donc qui ne dure pas longtemps, - et dans l'utilisation ZI, cela signifie que le modificateur ne dure que pour la prochaine commande ZI unique.

En utilisant un autre modificateur de glace "pick" les utilisateurs peuvent explicitement sélectionner le fichier à sourcer:

zi ice svn pick"init.zsh"zi snippet PZT::modules/git

Le contenu du modificateur de glace est simplement mis dans "…", '…', ou $'…'. Il n'est pas nécessaire d'ajouter " :" après le nom de l'ice-mod (bien qu'il soit autorisé, comme le signe égal =, donc par exemple pick="init.zsh" ou pick=init.zsh sont correctement reconnus).

De cette façon, des éditeurs comme vim et emacs et aussi zsh-users/zsh-syntax-highlighting et z-shell/F-Sy-H mettront en évidence le contenu des modificateurs de glace.

A propos d'as"program"

Un plugin peut ne pas être un fichier à sourcer, mais une commande à ajouter à $PATH. Pour obtenir cet effet, utilisez le modificateur de glace as avec la valeur program (ou un alias valeur command).

zi ice as"program" cp"httpstat.sh -> httpstat" pick"httpstat"zi light b4b4r07/httpstat

La commande ci-dessus ajoutera le répertoire plugin à $PATH, copiera le fichier httpstat.sh dans httpstat et ajoutera des droits d'exécution (+x) au fichier sélectionné avec pick, c'est-à-dire à httpstat. Il existe un autre ice-mod, mv, qui fonctionne comme cp mais déplace un fichier au lieu de le copier . mv est exécuté avant cp.

astuce

Les glaces cp et mv (et aussi comme d'autres, comme atclone) sont en cours d'exécution lorsque le plugin ou l'extrait est en cours d'installation __. Pour les tester à nouveau, supprimez d'abord le plugin ou le snippet (exemple : zi delete PZT::modules/osx).

À propos d'atpull"…"

La copie du fichier est sûre pour les mises à jour ultérieures - les fichiers originaux du dépôt ne sont pas modifiés et Git ne signalera aucun conflit. Cependant, mv peut également être utilisé, si un atpullapproprié, un modificateur de glace exécuté à update du plugin, sera utilisé :

zi ice as"program" mv"httpstat.sh -> httpstat" \  pick"httpstat" atpull'!git reset --hard'zi light b4b4r07/httpstat

Si atpull commence par un point d'exclamation, alors il sera exécuté avant git pull, et avant mv. Néanmoins, atpull, mv, cp sont exécutés uniquement si de nouveaux commits doivent être récupérés.

Donc, en résumé, lorsque l'utilisateur exécute zi update b4b4r07/httpstat pour mettre à jour ce plugin, et qu'il y a de nouvelles commits, ce qui se passe d'abord est que git reset --hard est exécuté - et il restaure original httpstat.sh, puis git pull est exécuté et il télécharge les nouveaux commits (en faisant une avance rapide), puis mv est exécuté à nouveau de sorte que la commande est httpstat et non httpstat.sh.

De cette façon, la glace mv peut être utilisée pour induire des changements permanents dans le contenu du plugin sans bloquer la possibilité de le mettre à jour avec git (ou avec subversion dans le cas des snippets, plus à ce sujet ci-dessous).

info

Pour que les points d'exclamation ne soient pas développés par Zsh lors d'une session interactive, utilisez '…' pas "…" pour enfermer le contenu de atpull , le modificateur de glace.

Snippets en tant que'…' commandes (as'...')

Les commandes peuvent également être ajoutées à $PATH à l'aide de snippets:

zi ice mv"httpstat.sh -> httpstat" \  pick"httpstat" as"program"zi snippet https://github.com/b4b4r07/httpstat/blob/master/httpstat.sh
astuce

Les snippets supportent également atpull, il est donc possible de faire par exemple atpull '!svn revert'. Il y a aussi un modificateur de glace atinit , exécuté avant chaque chargement de plugin ou de snippet.

Snippets en tant que'…' complétions (as'...')

En utilisant le modificateur de glace as'' avec la valeur completion vous pouvez faire pointer la sous-commande snippet directement vers un fichier completion :

zi ice as"completion"zi snippet https://github.com/docker/cli/blob/master/contrib/completion/zsh/_docker

La gestion des complétions

ZI permet de désactiver et d'activer chaque complétion dans chaque plugin. Essayez d'installer un plugin populaire qui fournit des complétions:

zi ice blockfzi light zsh-users/zsh-completions

La première commande, le blockf ice, bloquera la méthode traditionnelle d'ajout de complétions. ZI utilise sa méthode, basée sur les liens symboliques au lieu d'ajouter plusieurs répertoires à $fpath. ZI installera automatiquement les complétions d'un plugin nouvellement téléchargé.

Pour désinstaller et installer les compléments :

  • désinstaller : zi cuninstall zsh-users/zsh-completions
  • installer: zi creinstall zsh-users/zsh-completions

Liste des complétions disponibles

Pour voir quelles complétions fournissent tous les plugins , avec une mise en forme tabulaire et avec le nom de chaque plugin:

zi clist

Cette commande est spécialement adaptée pour les plugins tels que zsh-users/zsh-completions, qui fournissent plusieurs complétions – la liste aura 3 complétions par ligne, pour qu'un nombre plus petit de pages de terminal soient occupées comme ceci :

atach, bitcoin-cli, bower zsh-users/zsh-completionsbundle, caféiné, cap zsh-users/zsh-completionscask, cf, chattr zsh-users/zsh-completions

Pour afficher plus de complétions par ligne en fournissant un argument **** à clist, par exemple : zi clist 6, affichera :

bundle, caffeinate, cap, cask, cf, chattr zsh-users/zsh-completionscheat, choc, cmake, coffee, column, composer zsh-users/zsh-completionsconsole, dad, debuild, dget, dhcpcd, diana zsh-users/zsh-completions

Activation / désactivation des complétions

Les complétions peuvent être désactivées afin que, par exemple, la complétion originale de Zsh soit utilisée. Les commandes sont très basiques, elles n'ont besoin que du nom de la complétion:

$ zi cdisable cmakeDisabled cmake completion belonging to zsh-users/zsh-completions$ zi cenable cmakeEnabled cmake completion belonging to zsh-users/zsh-completions

C'est tout sur les complétions. Il y a une autre commande, zi csearch, qui va rechercher tous les répertoires de plugins pour les complétions disponibles.

Subversion pour les sous-répertoires

En général, pour utiliser les sous-répertoires des projets Github comme les snippets, ajoutez /trunk/{path-to-dir} à l'URL :

zi ice svnzi snippet https://github.com/zsh-users/zsh-completions/trunk/src
astuce

Pour Oh-My-Zsh et Prezto, les préfixes OMZ: : et PZT: : fonctionnent sans qu'il soit nécessaire d'ajouter l'infixe /trunk/ . Cependant, le chemin d'accès doit pointer vers un répertoire, et non vers un fichier.

zi ice svnzi snippet PZT::modules/docker

Mode turbo (Zsh >= 5.3)

Le modificateur de glace wait permet à l'utilisateur de reporter le chargement d'un plug-in au moment où le traitement de .zshrc est terminé et que la première invite est affichée.

C'est comme Windows - au démarrage, il affiche le bureau même s'il charge encore des données en arrière-plan. Cela présente des inconvénients mais c'est assurément mieux qu'un écran vide pendant 10 minutes. Et ici, dans ZI, il n'y a aucun inconvénient de cette approche - pas de lags, de freezes, etc. - la ligne de commande est entièrement utilisable pendant le chargement des plugins, pour n'importe quel nombre de plugins.

info

Turbo accélérera le démarrage de Zsh de 50%-80%. Par exemple, au lieu de 200 ms, ce sera 40 ms.

remarque

Zsh 5.3 ou supérieur est requis.

Pour utiliser ce mode turbo, ajoutez wait ice au plugin cible de l'une des manières suivantes:

PS1="READY > "zi ice wait'!0'zi load halfo/lambda-mod-zsh-theme

Ceci définit le plugin halfo/lambda-mod-zsh-theme pour être chargé 0 secondes après zshrc. Il s'incendiera après le c.a. 1 ms d'affichage de l'invite de base READY >.

Vous ne chargerez probablement pas l'invite de cette manière, mais c'est un bon exemple dans lequel Turbo peut être directement observé. Le point d'exclamation fait en sorte que ZI réinitialise l'invite après le chargement du plugin - il est nécessaire pour les thèmes. Il en va de même pour les invites Prezto, avec un délai plus long :

zi ice svn silent wait'!1' atload'prompt smiley'zi snippet PZT::modules/prompt

Utilisation de zsh-users/zsh-autosuggestions sans aucun inconvénient :

zi ice wait lucid atload'_zsh_autosuggest_start'zi light zsh-users/zsh-autosuggestions

Turbo en attente - la clé de la performance

Il peut être chargé de manière asynchrone, ce qui fait une énorme différence lorsque la quantité de plugins augmente. Généralement utilisé comme zi ice wait"<SECONDS>".

remarque

wait et wait"0" font la même chose

zi ice waitzi load z-shell/history-search-multi-word

Chargement après 2 secondes :

zi ice wait"2"zi load z-shell/history-search-multi-word

Peut également être utilisé avec light et snippet:

zi ice waitzi snippet https://gist.githubusercontent.com/hightemp/5071909/raw/

Turbo & lucid

Turbo et lucide sont les options les plus utilisées, car le mode turbo est verbeux, peut nécessiter une option pour le silence et ceci peut être réalisé avec lucid.

zi ice wait lucidzi load z-shell/history-search-multi-word

Turbo avec des invites sophistiquées

Pour certains thèmes, principalement les thèmes avancés, l'initialisation de l'invite est effectuée dans un precmd-hook, c'est-à-dire dans une fonction qui est appelée avant chaque invite. Le hook est installé par la fonction Zsh add-zsh-hook en ajoutant son nom au tableau $precmd_functions .

Pour que le prompt soit complètement initialisé après le chargement de Turbo au milieu du prompt, la même situation qu'avec le plugin zsh-autosuggestions , le hook doit être appelé à partir de atload'' ice`.

Tout d'abord, trouvez le nom de la fonction hook en examinant le tableau $precmd_functions . Par exemple, pour le thème robobenklein/zinc , il y aura deux fonctions : prompt_zinc_setup et prompt_zinc_precmd:

root@user > ~ > print $precmd_functions << 22:21:33_zsh_autosuggest_start prompt_zinc_setup prompt_zinc_precmd

Ensuite, ajoutez-les à la liste des glaces avec la glace atload'' :

zi ice wait'!' lucid nocd \  atload'!prompt_zinc_setup; prompt_zinc_precmd'zi load robobenklein/zinc

Le point d'exclamation dans atload ' !…' est pour suivre les fonctions permettant de décharger le plugin, comme décrit ici. Il peut être utile pour la configuration à plusieurs invites décrite ci-dessous.

Récapitulatif du mode turbo

Les autosuggestions utilisent le hook precmd , qui est appelé juste après le traitement zshrc - precmd les hooks sont appelés juste avant l'affichage de chaque invite.

Le turbo avec le vide wait ice reportera le chargement de 1 ms après, donc precmd ne sera pas appelé à cette première invite. Cela rend les autosuggestions inactives à la première invite.

Cependant, le modificateur de glace atload corrige cela, il appelle la même fonction que precmd le ferait, juste après le chargement des autosuggestions, ce qui entraîne le même comportement du plugin.

La glace lucid fait que le message sous l'invite disant Loaded zsh-users/zsh-autosuggestions qui apparaît normalement pour chaque plugin ne s'affiche pas.

Chargement basé sur la condition automatique & déchargement

Les glaces load et unload permettent de définir quand vous voulez que les plugins soient actifs ou inactifs :

Charger quand dans ~/tmp

zi ice load'![[ $PWD = */tmp* ]]' unload'![[ $PWD != */tmp* ]]' \  atload"!promptinit; prompt sprint3"zi load z-shell/zprompts

Charger lorsqu'IL N'est PAS dans ~ / tmp

zi ice load'![[ $PWD != */tmp* ]]' unload'![[ $PWD = */tmp* ]]'zi load russjohnson/angry-fly-zsh

Deux invites, chacune active dans des répertoires différents. Cette technique peut être utilisée pour créer des ensembles de plugins, par exemple en définissant le paramètre $PLUGINS avec des valeurs possibles comme cpp, web, admin et en définissant les conditions load / unload pour activer différents plugins sur cpp, sur web, etc.

remarque
  • La différence avec wait est que load / unload sont constamment actifs, pas seulement jusqu'à la première activation. Notez que pour que le déchargement d'un plugin fonctionne, le plugin doit être chargé avec le suivi, donc zi load … et non zi light ….

Le suivi entraîne un léger ralentissement, cependant, cela n'influence pas le temps de démarrage de Zsh lorsque vous utilisez le mode turbo.

Un coup d'œil sur les prompts

astuce

Voir : invites multiples pour plus d'informations. Il contient des exemples plus réels d'une configuration multi-prompts, qui est proche de ce que l'auteur utilise dans son installation.

Il s'agit des exemples powerlevel10k, pure, starship :

Chargez le thème powerlevel10k.

~/.zshrc
zi ice depth"1"zi light romkatv/powerlevel10k

Chargement du thème pure

  • Vous pouvez choisir la bibliothèque async.zsh et la sourcez.
~/.zshrc
zi ice pick"async.zsh" src"pure.zsh"zi light sindresorhus/pure

Charger le thème starship:

  • choisira le binaire starhip comme commande, à partir de la version GitHub
  • starship setup : atclone create init.zsh and completion
  • atpull comportement identique à celui de atclone et sera utilisé lors de l'exécution de zi update
  • src sera la source de init.zsh
~/.zshrc
zi ice as"command" from"gh-r" \  atclone"./starship init zsh > init.zsh; ./starship completions zsh > _starship" \  atpull"%atclone" \  src"init.zsh"zi light starship/starship

Mises à jour

Mise à jour automatique & compilation :

zi self-update

Mise à jour des plug-ins et des snippets:

zi update --all
zi update --reset
zi update --quiet

Mise à jour des plug-ins ou des snippets:

zi update --plugins
zi update --snipets

Mettre à jour un plug-in spécifique. La valeur par défaut est GitHub mais vous pouvez en spécifier une autre avec l'ice from'…':

zi update <user>/<repo>

Mise à jour en parallèle des plugins :

zi update --parallel

Augmenter le nombre de tâches dans un ensemble simultané à 40

zi update --parallel 40

Plus d'exemples sur les cas d'utilisation courants

Chargez le thème pur, avec la bibliothèque zsh-async qui lui est associée.

~/.zshrc
zi ice pick"async.zsh" src"pure.zsh"zi light sindresorhus/pure

Version binaire dans l'archive, depuis la page GitHub-releases. Après décompression automatique, il fournit le programme "fzf".

~/.zshrc
zi ice from"gh-r" as"program"zi light junegunn/fzf

Une autre version binaire doit être renommée de docker-compose-Linux-x86_64. Ceci peut être fait par le modificateur de glace: mv'{from} -> {to}'.

Il y a plusieurs paquets par version unique, pour OS X, Linux et Windows - ainsi le modificateur de glace bpick est utilisé pour sélectionner le paquet Linux - dans ce cas, ce n'est pas nécessaire, ZI va grep le nom du système d'exploitation et l'architecture automatiquement quand il n'y a pas bpick.

~/.zshrc
zi ice from"gh-r" as"program" mv"docker* -> docker-compose" bpick"*linux*"zi load docker/compose

Dépôt Vim sur GitHub - un code source typique qui nécessite une compilation, ZI peut la gérer pour vous si vous le souhaitez, exécutez ./configure et make. Le modificateur de glace pick sélectionne un programme binaire à ajouter au $PATH. Vous pouvez également installer le paquet sous le chemin $ZPFX.

~/.zshrc
zi ice as"program" atclone"rm -f src/auto/config.cache; ./configure" \  atpull"%atclone" make pick"src/vim"zi light vim/vim

Scripts qui sont construits lors de l'installation

Il y a une seule cible make par défaut, "install", et elle construit des scripts.

La glace make'' pourrait également être : make "install PREFIX=$ZPFX", si "install" n'était pas la seule cible par défaut.

~/.zshrc
zi ice as"program" pick"$ZPFX/bin/git-*" make"PREFIX=$ZPFX"zi light tj/git-extras

Gère les complétions sans charger de plugin, voir la commande clist . Celui-ci ne doit être exécuté qu'une seule fois, lors d'une session interactive.

~/.zshrc
zi creinstall %HOME/my_completions

Pour GNU ls les binaires peuvent être gls, gdircolors, mais pas sur OS X lors de l'installation du paquet coreutils de Homebrew.

~/.zshrc
zi ice atclone"dircolors -b LS_COLORS > c.zsh" \  atpull'%atclone' pick"c.zsh" nocompile'!'zi light trapd00r/LS_COLORS

fais'!' -> exécuter make avant atclone & atpull.

zi ice as"program" make'!' \  atclone'./direnv hook zsh > zhook.zsh' \  atpull'%atclone' src"zhook.zsh"zi light direnv/direnv

Si vous souhaitez en essayer davantage, consultez le dépôt playground où les utilisateurs ont téléchargé le fichier ~/.zshrc et d'autres configurations ZI. N'hésitez pas à soumettre votre ~/.zshrc là s'il contient des commandes ZI.

Exemples supplémentaires : collection.