Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
zsh [Le 03/11/2015, 15:18]
80.93.83.20 [Complétion]
zsh [Le 18/11/2023, 17:47] (Version actuelle)
moths-art [Complétion pour la commande killall] Le correctif est très vieux. Le tips ne sert plus
Ligne 1: Ligne 1:
-{{tag>​console shell BROUILLON}}+{{tag>​console shell }}
  
 ---- ----
Ligne 5: Ligne 5:
 ====== ZSH ====== ====== ZSH ======
  
-**Zsh** est un interpréteur de commandes (shell), tout comme bash.+**Zsh** est un interpréteur de commandes ([[shell]]), tout comme [[bash]].
 Il fournit une interface entre l'​utilisateur et le système. Il est indispensable d'​avoir un interpréteur de commandes pour utiliser un système GNU/Linux (et même tous les autres systèmes). Il fournit une interface entre l'​utilisateur et le système. Il est indispensable d'​avoir un interpréteur de commandes pour utiliser un système GNU/Linux (et même tous les autres systèmes).
-Le shell par défaut dans Ubuntu est bash, c'est un shell qui a bien des avantages (notamment pour les scripts), mais il est assez limité dans certaines fonctionnalités comme l'​autocomplétion.+Le shell par défaut dans Ubuntu est [[bash]], c'est un shell qui a bien des avantages (notamment pour les scripts), mais il est assez limité dans certaines fonctionnalités comme l'​autocomplétion.
 Zsh est plutôt orienté pour l'​interactivité avec l'​utilisateur. Zsh est plutôt orienté pour l'​interactivité avec l'​utilisateur.
  
 ===== Installation ===== ===== Installation =====
-[[:​tutoriel:​comment_installer_un_paquet|Installez le paquet]] **[[apt://​zsh|zsh]]**. 
  
-===En mode console ​:=== +[[:tutoriel:​comment_installer_un_paquet|Installez le paquet]] **[[apt>zsh|zsh]]**. 
-<code bash>​sudo ​apt-get install zsh</​code>+
 ===== Utilisation ===== ===== Utilisation =====
  
-Vous pouvez le lancer comme ceci : +Vous pouvez le lancer comme ceci :
   zsh   zsh
  
-Pour définir zsh comme shell par défaut (lorsque vous vous connectez dans un terminal (ou un émulateur de terminal), on peut utiliser l'​utilitaire chsh :+Pour définir zsh comme shell par défaut (lorsque vous vous connectez dans un [[terminal]] (ou un émulateur de terminal), on peut utiliser l'​utilitaire chsh :
   chsh   chsh
  
 On vous demande quel shell utiliser, répondez /bin/zsh (en toutes lettres). On vous demande quel shell utiliser, répondez /bin/zsh (en toutes lettres).
-<note important>​Vérifiez bien votre saisie avant de valider, sinon vous risquez d'​avoir un terminal non fonctionnel.</​note>​ +<note important>​ 
-Puis déconnectez vous et reconnectez vous. Et voilà, vous êtes sur zsh !+Vérifiez bien votre saisie avant de valider, sinon vous risquez d'​avoir un terminal non fonctionnel. 
 +</​note>​ 
 + 
 +Puis déconnectez-vous et reconnectez-vous. Et voilà, vous êtes sur zsh !
  
 Si vous ne possédez pas les droits d'​administration sur l'​ordinateur que vous utilisez, il vous suffit d'​inscrire ceci dans votre fichier **~/​.bashrc** Si vous ne possédez pas les droits d'​administration sur l'​ordinateur que vous utilisez, il vous suffit d'​inscrire ceci dans votre fichier **~/​.bashrc**
  
   exec zsh   exec zsh
 +  ​
 +<note tip>
 +Si gnome-terminal ne se lance pas avec zsh et continue de fonctionner avec bash alors il faut aller dans les préférences du profil dans le menu “Édition”.
 +Cocher “Exécuter une commande personnalisée de mon shell” dans l'​onglet “Titre et Commande”. Mettre zsh comme commande personnalisée.
 +</​note>​
  
 ===== Les fichiers de configuration ===== ===== Les fichiers de configuration =====
Ligne 38: Ligne 45:
  
 Il est possible que les distributions fournissent un ''/​etc/​zshrc''​ donc je vous conseille d'​aller voir ce qu'il y a dans ce fichier. Il est possible que les distributions fournissent un ''/​etc/​zshrc''​ donc je vous conseille d'​aller voir ce qu'il y a dans ce fichier.
-Pour toutes les modifications que vous ferez dans les fichiers de configuration,​ il faut lancer la commande ​"source" ​sur les fichiers que vous avez modifiés pour que ça prenne effet, par exemple :+Pour toutes les modifications que vous ferez dans les fichiers de configuration,​ il faut lancer la commande ​source” sur les fichiers que vous avez modifiés pour que ça prenne effet, par exemple :
   source ~/.zshrc   source ~/.zshrc
  
-Toutes les commandes qui vont être données peuvent être tapées directement dans le shell, mais pour qu'​elles prennent effet lors de la connexion au shell il faut les écrire dans un des fichiers de configuration (/​etc/​zsh/​zshrc ou ~/.zshrc) +Toutes les commandes qui vont être données peuvent être tapées directement dans le shell, mais pour qu'​elles prennent effet lors de la connexion au shell il faut les écrire dans un des fichiers de configuration (''​/​etc/​zsh/​zshrc'' ​ou ''​~/.zshrc''​)
- +
-Pour les feignants, il y a un fichier de configuration tout prêt en fin de page. LOL  +
- +
- +
  
 +Pour les feignants, il y a un fichier de configuration tout prêt en fin de page.
  
 ==== Complétion ==== ==== Complétion ====
Ligne 53: Ligne 56:
 La complétion sous Zsh est très avancée. Par défaut, vous avez par exemple : La complétion sous Zsh est très avancée. Par défaut, vous avez par exemple :
  
-  * Complétion sur les noms de domaines. Par exemple, après ssh <​TAB>,​ zsh complétera parmi les noms de domaines dans /etc/hosts, .ssh/ etc. , et même après +  * Complétion sur les noms de domaines. Par exemple, après ​''​ssh <TAB>''​, zsh complétera parmi les noms de domaines dans ''​/etc/hosts''​''​.ssh/'', ​etc. , et même après ​''​scp fichier user@domaine:​~/​ <TAB>''​, zsh complètera par les noms de fichiers sur le serveur
-scp fichier user@domaine:​~/​ <​TAB>,​ zsh complètera par les noms de fichiers sur le serveur+
  
-  * Complétion après make par les cibles ​possible ​du makefile+  * Complétion après ​''​make'' ​par les cibles ​possibles ​du Makefile
  
-  * Complétion sur les options des programmes, avec la description de celles-ci. Essayez par exemple mplayer -v <TAB>+  * Complétion sur les options des programmes, avec la description de celles-ci. Essayez par exemple ​''​mplayer -v <TAB>''​
  
   * Complétion sur les pages de manuel   * Complétion sur les pages de manuel
-ssssssssssssssssssssssssssssssssssssssssssssssssssssss + 
-  * ... et bien d'​autres+  * … et bien d'​autres
  
 Ajoutons que cette complétion est entièrement configurable : Ajoutons que cette complétion est entièrement configurable :
Ligne 77: Ligne 79:
   zstyle ':​completion:​*'​ select-prompt %SScrolling active: current selection at %p%s   zstyle ':​completion:​*'​ select-prompt %SScrolling active: current selection at %p%s
  
-Pour éviter de proposer un élément déjà présent lors d'un cp, mv ou rm :+Pour éviter de proposer un élément déjà présent lors d'​un ​''​cp''​''​mv'' ​ou ''​rm'' ​:
   zstyle ':​completion:​*:​rm:​*'​ ignore-line yes   zstyle ':​completion:​*:​rm:​*'​ ignore-line yes
   zstyle ':​completion:​*:​mv:​*'​ ignore-line yes   zstyle ':​completion:​*:​mv:​*'​ ignore-line yes
   zstyle ':​completion:​*:​cp:​*'​ ignore-line yes   zstyle ':​completion:​*:​cp:​*'​ ignore-line yes
  
-Sur Ubuntu, on utilise souvent ''​sudo'',​ donc il peut être intéressant d'​avoir la complétion lorsque la commande n'est pas dans votre $PATH :+Sur Ubuntu, on utilise souvent ''​sudo'' ​(doc [[sudo]]), donc il peut être intéressant d'​avoir la complétion lorsque la commande n'est pas dans votre $PATH :
   zstyle ':​completion:​*:​sudo:​*'​ command-path /​usr/​local/​sbin /​usr/​local/​bin \   zstyle ':​completion:​*:​sudo:​*'​ command-path /​usr/​local/​sbin /​usr/​local/​bin \
                              /​usr/​sbin /usr/bin /sbin /bin /​usr/​X11R6/​bin                              /​usr/​sbin /usr/bin /sbin /bin /​usr/​X11R6/​bin
- 
  
 Zsh supporte aussi les fonctions de complétion de bash, pour les utiliser : Zsh supporte aussi les fonctions de complétion de bash, pour les utiliser :
Ligne 91: Ligne 92:
   bashcompinit   bashcompinit
  
 +Ensuite il suffit de "​sourcer"​ les fichiers de configuration de bash. (''/​etc/​profile'' ​ ou ''​~/​.bashrc''​)
  
-Ensuite il suffit de "​sourcer"​ les fichiers de configuration de bash. (/​etc/​profile ​ ou ~/​.bashrc) +Zsh peut aussi vous corriger si vous tapez ''​sl'' ​à la place de ''​ls'' ​(sauf si vous avez installé sl LOL )
- +
-Zsh peut aussi vous corriger si vous tapez sl à la place de ls (sauf si vous avez installé sl LOL )+
   setopt correctall   setopt correctall
- 
- 
  
 ==== Le prompt ==== ==== Le prompt ====
Ligne 106: Ligne 104:
 Ce prompt est contenu dans une (ou plusieurs) variables d'​environnements. La plus utilisée est certainement $PS1 Ce prompt est contenu dans une (ou plusieurs) variables d'​environnements. La plus utilisée est certainement $PS1
  
-Zsh fournit des prompts ​prêt à l'​emploi dans /​usr/​share/​zsh/​functions/​Prompts.+Zsh fournit des prompts ​prêts ​à l'​emploi dans /​usr/​share/​zsh/​functions/​Prompts.
 Pour les activer : Pour les activer :
   autoload -U promptinit   autoload -U promptinit
   promptinit   promptinit
-Vous pouvez avoir une liste des themes ​comme ceci :+ 
 +Vous pouvez avoir une liste des thèmes ​comme ceci :
   prompt -l   prompt -l
 +
 Mais aussi un aperçu de tous les prompts disponibles : Mais aussi un aperçu de tous les prompts disponibles :
   prompt -p   prompt -p
Ligne 118: Ligne 118:
   prompt NOM_DU_THEME   prompt NOM_DU_THEME
  
-Si vous voulez faire votre prompt vous mêmes, voyez cette page : [[http://​www.gentoo.org/​doc/​fr/​zsh.xml#​doc_chap2]] +Si vous voulez faire votre prompt vous mêmes, voyez cette page : [[https://​wiki.archlinux.org/​index.php/​zsh|Arch Linux ZSH]]
-et cette page : [[https://​wiki.archlinux.org/​index.php/​zsh]]+
  
 ==== Globbing ==== ==== Globbing ====
  
-La fonctionnalité qui vous fera oublier find 8-)+La fonctionnalité qui vous fera oublier ​[[tutoriel/​console_commandes_de_base#​find|find]] ​8-)
  
 Un exemple : <​code>​rm **/​*toto*</​code>​ supprimera tous les fichiers comprenant le mot toto dans le répertoire courant, et ensuite en cherchant récursivement dans tous les sous-dossiers. Un exemple : <​code>​rm **/​*toto*</​code>​ supprimera tous les fichiers comprenant le mot toto dans le répertoire courant, et ensuite en cherchant récursivement dans tous les sous-dossiers.
Ligne 131: Ligne 130:
 ==== ZLE ==== ==== ZLE ====
  
-ZLE désigne la zone dans laquelle vous tapez vos commandes. Vous pouvez utiliser les raccourcis claviers de vi ou d'emacs, au choix, et définir très facilement vos propres raccourcis. ​+ZLE désigne la zone dans laquelle vous tapez vos commandes. Vous pouvez utiliser les raccourcis claviers de [[:​Vim]] ​ou d'[[:Emacs]], au choix, et définir très facilement vos propres raccourcis. ​
 En vrac, quelques raccourcis par défaut : En vrac, quelques raccourcis par défaut :
  
   * <​Echap>​h va appeler la page de manuel du premier mot que vous êtes en train de taper   * <​Echap>​h va appeler la page de manuel du premier mot que vous êtes en train de taper
   * <​Echap>​q va copier la ligne que vous étiez en train de taper en mémoire, pour vous laisser devant une ligne vide. Vous pouvez alors rentrer une nouvelle commande, lorsque celle-ci sera terminée, zsh vous affichera la ligne en mémoire.   * <​Echap>​q va copier la ligne que vous étiez en train de taper en mémoire, pour vous laisser devant une ligne vide. Vous pouvez alors rentrer une nouvelle commande, lorsque celle-ci sera terminée, zsh vous affichera la ligne en mémoire.
- 
  
 ==== Alias ==== ==== Alias ====
  
-ZSH permet, comme bash, de définir des "alias", c'est à dire des commandes définies à partir d'​autres commandes, par exemple :+ZSH permet, comme bash, de définir des alias, cest-à-dire des commandes définies à partir d'​autres commandes, par exemple :
  
   alias la="ls -a"   alias la="ls -a"
  
-Permet de définir une commande '​la'​ qui seras identique à 'ls -a' (liste les fichiers du répertoire passé en paramètre, en incluant les fichiers cachés).+Permet de définir une commande ​''la'' qui seras identique à ''ls -a'' (liste les fichiers du répertoire passé en paramètre, en incluant les fichiers cachés).
  
-Pour pouvoir se servir en permanence de ces alias il faut qu'ils soient inscrits dans le fichier ~/.zshrc.+Pour pouvoir se servir en permanence de ces aliasil faut qu'ils soient inscrits dans le fichier ~/.zshrc.
  
 === Alias suffixe === === Alias suffixe ===
Ligne 163: Ligne 161:
 === Alias globaux === === Alias globaux ===
  
- +Zsh permet également de définir des alias globaux” qui s’exécuteront ​quelle que soit leur position dans la ligne de commande, ainsi avec l'​alias :
-Zsh permet également de définir des alias "globaux" ​qui s’exécuteront ​quelque ​soit leurs position dans la ligne de commande, ainsi +
  
 <​code>​ alias -g G=' | grep '</​code>​ <​code>​ alias -g G=' | grep '</​code>​
  
-remplacera ​la commande ​  +la commande ​:
-  +
- <​code>​ ls /bin G zsh</​code>​+
  
-par+<​code>​ ls /bin G zsh</​code>​
  
- <​code>​ ls /bin | grep zsh</​code>​+remplacera : 
 + 
 +<​code>​ ls /bin | grep zsh</​code>​
  
 ===== Un exemple de fichier zshrc ===== ===== Un exemple de fichier zshrc =====
Ligne 234: Ligne 231:
  
 ===== Une configuration avancée ===== ===== Une configuration avancée =====
 +
 Pour ceux qui ne souhaitent pas se plonger dans les fichiers de configurations de zsh, mais qui souhaitent tout de même avoir une configuration agréable à utiliser, je vous propose la configuration suivante : Pour ceux qui ne souhaitent pas se plonger dans les fichiers de configurations de zsh, mais qui souhaitent tout de même avoir une configuration agréable à utiliser, je vous propose la configuration suivante :
-<​code>​wget http://​formation-debian.via.ecp.fr/​fichiers-config/​zshrc +<​code> ​for pkg in zshrc zshenv zlogin zlogout dir_colors ;do sudo wget -cO /etc/zsh/$pkg https://​formation-debian.viarezo.fr/​fichiers-config/​$pkg ;done 
-wget http://​formation-debian.via.ecp.fr/fichiers-config/zshenv +sudo cp /etc/zsh/​dir_colors ​ /​etc/</​code>​ 
-wget http://​formation-debian.via.ecp.fr/​fichiers-config/​zlogin +
-wget http://​formation-debian.via.ecp.fr/​fichiers-config/​zlogout +
-wget http://formation-debian.via.ecp.fr/fichiers-config/​dir_colors +
-sudo mv zshrc zshenv zlogin zlogout ​dir_colors /etc/zsh</​code>​+
 Vous aurez un prompt en couleur, des raccourcis clavier similaires à ceux d'​[[:​Emacs]],​ ainsi qu'à ceux de [[:Vim]], et de nombreuses autres possibilités. Vous aurez un prompt en couleur, des raccourcis clavier similaires à ceux d'​[[:​Emacs]],​ ainsi qu'à ceux de [[:Vim]], et de nombreuses autres possibilités.
 +
 +===== Rendre ZSH plus sexy =====
 +
 +Vous pouvez utiliser des thèmes de terminal avec [[Oh-my-zsh|Oh my zsh]].
  
 ===== Résolution de problèmes ===== ===== Résolution de problèmes =====
-  ​* Les touches home, fin, ctrl+[aerl] et autres ne fonctionnent pas correctement,​ affichent des caractères bizarre : \\ peut-être en pensant bien faire, vous avez sélectionné,​ lors de la configuration initiale, les raccourcis type vi, et trouverez donc certainement dans votre ~/.zshrc la directive bindkey -v. Dans ce cas, essayez de remplacer cette directive par bindkey -e qui correspond aux raccourcis de type emacs et qui devraient restaurer le comportement attendu.+ 
 +  ​* Les touches home, fin, ctrl+[aerl] et autres ne fonctionnent pas correctement,​ affichent des caractères bizarre : \\ peut-être en pensant bien faire, vous avez sélectionné,​ lors de la configuration initiale, les raccourcis type vi, et trouverez donc certainement dans votre ~/.zshrc la directive bindkey -v. Dans ce cas, essayez de remplacer cette directive par bindkey -e qui correspond aux raccourcis de type [[:​Emacs]] ​et qui devraient restaurer le comportement attendu. 
 ==== Raccourcis clavier du terminal ==== ==== Raccourcis clavier du terminal ====
 +
 Si ça ne résout pas le bug (cf « résolution de problèmes »), insérer les lignes suivantes dans ~/.zshrc : Si ça ne résout pas le bug (cf « résolution de problèmes »), insérer les lignes suivantes dans ~/.zshrc :
-<code bash># Touche de commande+ 
 +<code bash> 
 +# Touche de commande
 bindkey "​\e[H"​ beginning-of-line # Début bindkey "​\e[H"​ beginning-of-line # Début
 bindkey "​\e[F"​ end-of-line # Fin bindkey "​\e[F"​ end-of-line # Fin
 bindkey "​\e[3~"​ delete-char bindkey "​\e[3~"​ delete-char
-bindkey "​^R"​ history-incremental-search-backward # Rechercher</​code>​+bindkey "​^R"​ history-incremental-search-backward # Rechercher 
 +</​code>​ 
 <note tip>​Astuce,​ pour connaître les raccourcis clavier de votre terminal, taper la commande : <note tip>​Astuce,​ pour connaître les raccourcis clavier de votre terminal, taper la commande :
-<code bash>cat -v</​code>​ et taper sur la touche du clavier désirée pour connaître son bindkey, vous verrez que ce dernier ne correspond pas à ceux listés par : + 
-<code bash>​bindkey</​code>​+<code bash> 
 +cat -v 
 +</​code>​ 
 + 
 +et taper sur la touche du clavier désirée pour connaître son bindkey, vous verrez que ce dernier ne correspond pas à ceux listés par : 
 + 
 +<code bash> 
 +bindkey 
 +</​code>​ 
 À noter, que vous pouvez directement connaître le bindkey via Vim : passer en mode insertion et taper Ctrl V</​note>​ À noter, que vous pouvez directement connaître le bindkey via Vim : passer en mode insertion et taper Ctrl V</​note>​
-==== Complétion pour la commande killall ==== 
-Pour ceux qui viennent de bash ils seront dérouté de voir que la commande killall ne propose pas de complétion,​ ce bogue a été corrigé :  [[https://​bugs.launchpad.net/​ubuntu/​+source/​zsh/​+bug/​204234|zsh'​s killall process tab completion should match bash's ]] 
  
-Pour faire simple, il suffit de rajouter dans le fichier /​etc/​zsh/​zshrc ​ les lignes suivantes : +
-<code bash>​zstyle ':​completion:​*:​processes'​ command 'ps -ax' +
-zstyle ':​completion:​*:​processes-names'​ command 'ps -aeo comm='​ +
-zstyle ':​completion:​*:​*:​kill:​*:​processes'​ list-colors '=(#b) #​([0-9]#​)*=0=01;​31'​ +
-zstyle ':​completion:​*:​*:​kill:​*'​ menu yes select +
-zstyle ':​completion:​*:​*:​killall:​*:​processes-names'​ list-colors '=(#b) #​([0-9]#​)*=0=01;​31'​ +
-zstyle ':​completion:​*:​*:​killall:​*'​ menu yes select</​code>​+
 ===== Voir aussi ===== ===== Voir aussi =====
  
-  ​* **(fr)** [[http://​wiki.gcu.info/​doku.php?​id=unix:​zsh_le_z_shell|unix:zsh le z shell]] +  * [[Oh-my-zsh|Oh my zsh]] 
-  * **(fr)** [[http://www.gentoo.org/​doc/fr/zsh.xml|Guide sur l'​installation et la configuration de zsh]] sur Gentoo.org +  * **(en)** [[https://wiki.gentoo.org/​wiki/Zsh|Guide sur l'​installation et la configuration de zsh]] sur Gentoo.org 
-  * **(en)** [[http://​zshwiki.org/​home/​]]+  * **(en)** [[https://​zshwiki.org/​home/​]] 
 +  *  **(en)** [[https://​hackernoon.com/​macbook-my-command-line-utilities-f8a121c3b019#​.87unujp9a|Description des usages de la commande]]
   * **(fr)** [[http://​cli.asyd.net/​home/​shell/​zsh/​racine]]   * **(fr)** [[http://​cli.asyd.net/​home/​shell/​zsh/​racine]]
  
Ligne 276: Ligne 284:
  
 //​Contributeurs : [[:​utilisateurs/​yannick_lm|yannick_lm]],​ [[:​utilisateurs/​philpep-tlse|philpep-tlse]],​ [[:​utilisateurs/​geenux|geenux]],​ [[:​utilisateurs/​malko25|malko25]],​ [[:​utilisateurs:​david96|david96]].//​ //​Contributeurs : [[:​utilisateurs/​yannick_lm|yannick_lm]],​ [[:​utilisateurs/​philpep-tlse|philpep-tlse]],​ [[:​utilisateurs/​geenux|geenux]],​ [[:​utilisateurs/​malko25|malko25]],​ [[:​utilisateurs:​david96|david96]].//​
 +
  • zsh.1446560282.txt.gz
  • Dernière modification: Le 03/11/2015, 15:18
  • par 80.93.83.20