Zsh
Les bases
Zsh est un autre Shell. Il apporte un certain nombre de nouvelles fonctionnalités par rapport à Bash, il est d'ailleurs plus récent : correction orthographique, une meilleure utilisation de l'autocomplétion...
Installer zsh
pacman -S zsh
OhMyZsh
Omzsh est un framework qui permet d'améliorer zsh à l'aide de plugin et de le configurer. Pour l'instant, la principale utilisation que je vois est celle des thèmes. On peut faire des ajustements dans le .zshrc :
<source lang="zsh">
- If you come from bash you might have to change your $PATH.
- export PATH=$HOME/bin:/usr/local/bin:$PATH
- Path to your oh-my-zsh installation.
export ZSH="/home/justine/.oh-my-zsh"
- Set name of the theme to load --- if set to "random", it will
- load a random theme each time oh-my-zsh is loaded, in which case,
- to know which specific one was loaded, run: echo $RANDOM_THEME
- See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="duellj" </source>
Le lien donné dedans contient tous les thèmes.
On peut aussi ajouter des plugins :
https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins
Il suffit d'ajouter les bonnes lignes dans le zshrc :
<source lang="zsh"> plugins=(git extract z) </source>
Fonctionnalités utiles
Correction orthographique
Zsh repère les erreurs:
<source> ~ >>> ehco salut zsh: correct 'ehco' to 'echo' [nyae]? </source>
Oh my zsh enlève cette fonction...
Raccourcir les chemins absolus
On est pas obligé de taper les chemins en entier dans zsh, il peut compléter tout seul. Je ne trouve pas ça très utiles quand l'autocomplétion existe, m'enfin bon:
<source> ls /u/sh/ico
- Amène à
/usr/share/icons </source>
Encore une fois, Oh my zsh enlève ça ?! De toute façon , ça n'est pas génial.
Alias
Une fonctionnalité de Oh My Zsh, on a de nouveaux alias :
<source> cd ../.. = ... cd ../../.. = .... mkdir -p = md rmdir = rd git add = ga git add --all = gaa git branch = gb git commit -m = gcmsg git checkout = gco git pull origin currentbranch = ggpull git push origin currentbranch = ggpush systemctl start = sc-start systemctl stop = sc-stop systemctl status = sc-status systemctl enable = sc-enable </source>
Gestion de l'historique
La gestion de l'historique et l'autocomplétion sont bien mieux. Si je veux retaper ma commande "kill firefox" que j'ai utilisée il y'a un moment, je peux juste taper "ki" et la flèche du haut pour la récupérer.
Résumer les options d'une commande
Plutôt que d'avoir à faire un help ou je ne sais quoi, on peut récupérer simplement les options d'une commande. Il suffit de taper la commande, puis un tiret, puis tab : on a tous les arguments de détaillés. Super utile.
<source> └─[$] ls -b [0:03:27] -1 -- single column output -A -- list all except . and .. -a -- list entries starting with . -B -- don't list entries ending with ~ -C -- list entries in columns sorted vertically -c -- status change time -D -- generate output designed for Emacs' dired mode -d -- list directory entries instead of contents -F -- append file type indicators -f -- unsorted, all, short list -G -- inhibit display of group information -g -- long listing but without owner information [...] </source>
Globbing
De nouvelles fonctionnalités de globbing sont là aussi. On peut avoir plusieurs niveax de *: <source> └─[$] ls **/* └─[$] ls */*.txt
- Etc
</source>
You can also search for words or phrases within the file names.
<source>
- Starts with READ
$ ls **/(READ)*.*
- Ends With READ
$ ls **/*(READ).*
- Contains READ Anywhere
$ ls **/*(READ)*.* </source>
That's a really awkward way to list files. There are a couple of very easy ways to specify files and folders.
<source>
- Files Only
$ ls **/*(.)
- Folders Only
$ ls **/*(/) </source>
You can also specify one of a number of characters.
<source>
- All files that start with A
$ ls **/[A]*(.)
- All files that start with A or a
$ ls **/[Aa]*(.)
- All Files that contain the number
$ ls **/*[1]*(.)
- Any files that end in a vowel
$ ls **/*[aeiouy](.) </source>
If you want to exclude a character or characters, you can do that too.
<source>
- Files that don't start with A or a
$ ls **/[^Aa](.) </source>
You can search for ranges of letters also.
<source>
- Files that end in a number
$ ls **/*<1-10>(.) </source>