Zsh

De Banane Atomic
Aller à la navigationAller à la recherche

Liens

Installation

Bash.svg
sudo pacman -S zsh zsh-completions zsh-lovers zsh-syntax-highlighting
# zsh-completions: ajoute la completion pour des fonctions supplémentaires
# zsh-lovers: astuces pour zsh, accessibles via man zsh-lovers
# zsh-syntax-highlighting: coloration syntaxique de la ligne de commande lors de la frappe

# définir zsh comme shell par défaut pour l'utilisateur courant
chsh -s /bin/zsh
# se relogguer pour que le modification soit prise en compte

Configuration

~/.zshrc
DEFAULT_USER=billy
~/.zshenv
# pour visudo
export EDITOR='nano'
# pour cron et yaourt
export VISUAL='nano'

# Afficher les pages de manuel en couleur grace à MOST. 
export PAGER="most"

# PATH
export PATH=$PATH:~/.config/yarn/global/node_modules/.bin

Startup Files

Les fichiers suivants sont lus au lancement de zsh:

~/.zshenv variables d'environnement
~/.zprofile équivalent de zlogin, mais lu avant zshrc
~/.zshrc Run Commands
~/.zlogin lu au démarrage d'un shell de connexion, après zshrc
~/.zlogout lu à la sortie d'un shell de connexion

History

Recherche dans l'historique Ctrl + R
Bash.svg
# supprimer tout les lignes contenant password
LC_ALL=C sed -i '/password/d' $HISTFILE
# il faut relancer zsh pour vérifier le résultat
Un espace en premier caractère d'une ligne de commande permet d'exécuter la commande sans l'enregistrer dans l'historique.
~/.zshrc
# don't store in history commands prefixed with a space (test with: history | tail)
setopt HIST_IGNORE_SPACE

OH MY ZSHELL!

Bash.svg
# installation en une ligne
sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

# installation de OH MY ZSHELL
git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh

# remplacement du fichier zshrc
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

Configuration

~/.zshrc
# thème
ZSH_THEME="robbyrussell"

# Modifier le prompt
#autoload -U colors && colors
#PROMPT="%{$fg_bold[blue]%}%~ %{$fg[white]%}➭%{$reset_color%}  "

# oh-my-zsh
source $ZSH/oh-my-zsh.sh

# plugins (ils se trouvent dans ~/.oh-my-zsh/plugins/ et ~/.oh-my-zsh/custom/plugins/)
plugins=(colored-man-pages common-aliases extract git sudo systemd wd)

# zsh-syntax-highlighting, doit être sourcé en dernier
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
Au lieu de modifier le fichier ~/.zshrc, il est possible de créer des fichiers de configuration *.zsh dans le dossier ~/.oh-my-zsh/custom/
  • ~/.oh-my-zsh/custom/aliases.zsh
  • ~/.oh-my-zsh/custom/functions.zsh
  • ~/.oh-my-zsh/custom/variables.zsh

Thèmes

  • agnoster (installer powerline-fonts pour patcher la police)
  • robbyrussell
Variable Valeur
%M %m hostname, version normale et version courte
%n nom de l'utilisateur
%~ chemin avec $HOME remplacé par ~
$(git_prompt_info) ~/.oh-my-zsh/lib/git.zsh
${ret_status} ~/.oh-my-zsh/themes/robbyrussell.zsh-theme

local ret_status="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"

PROMPT

~/.zshrc
# ajout de l'utilisateur et du nom de la machine hôte au PROMPT du thème robbyrussell si connexion ssh
if [[ -n $SSH_CONNECTION ]]; then
    PROMPT="%n@%m ${PROMPT}"
fi

Alias

alias commande explication fichier
... ../.. ~/.oh-my-zsh/lib/directories.zsh
.... ../../.. ~/.oh-my-zsh/lib/directories.zsh
md mkdir -p créé un dossier et les dossiers parents au besoin ~/.oh-my-zsh/lib/directories.zsh
rd rmdir ~/.oh-my-zsh/lib/directories.zsh
alias_value donne la valeur d'un alias ~/.oh-my-zsh/lib/functions.zsh
_ sudo ~/.oh-my-zsh/lib/misc.zsh
Bash.svg
# rechercher dans quel fichier est définit un alias
zsh -ixc : 2>&1 | grep fd=find
# +~/.oh-my-zsh/plugins/common-aliases/common-aliases.plugin.zsh:37> alias 'fd=find . -type d -name'

Alias custom

~/.oh-my-zsh/custom/alias.zsh
Les alias custom ne fonctionnent pas dans les subshell car c'est bash qui est utilisé.
Il faut donc les définir dans bash aussi:

~/.bash_aliases
if [ -f ~/.oh-my-zsh/custom/alias.zsh ]; then
    . ~/.oh-my-zsh/custom/alias.zsh
fi

Plugins

colored-man-pages colore les pages man
command-not-found Si une commande n'est pas trouver, essaye de trouver le paquet pacman à installer pour cette commande.
Installer le paquet pkgfile.
extract Permet de désarchiver tous les format d'archive avec la commande extract.
sudo Appuyer 2 fois sur Esc pour ajouter sudo en début de ligne de commandes.

systemd

Bash.svg
# Alias sc-[cmd] → systemctl [cmd]
sc-status nginx  → systemctl status nginx
sc-start nginx   → sudo systemctl status nginx

wd - Warp Directory

Bash.svg
# ajouter/supprimer MonDossier de la liste
wd add/rm MonDossier

# se rendre à MonDossier depuis n'importe où
wd add MonDossier

wd list/show

chucknorris

  • Installer fortune-mod et cowsay
  • Ajouter chuck_cow à la fin de ~/.zshrc

common-aliases

alias commande explication
l ls -lFh -F ajoute un / à la fin des noms de dossiers
la ls -lAFh -A affiche tous sauf . et ..
lr ls -tRFh -R parcourt récursivement les dossiers
lt ls -ltFh trie par ordre antéchronologique de modification
ll ls -l
ldot ls -ld .* liste tous les fichiers et dossiers commençant par . sauf . et ..
lS ls -1FSsh liste par ordre décroissant de taille
lart ls -1Fcart liste par ordre chronologique de modification
lrt ls -1Fcrt liste par ordre chronologique de modification
zshrc $EDITOR ~/.zshrc
sgrep grep -R -n -H -C 5 --exclude-dir={.git,.svn,CVS} recherche récursivement du texte dans tous les fichiers
t tail -f afficher le contenu d'un fichier en temps réel
fd find . -type d -name
ff find . -type f -name
h history
hgrep fc -El 0 | grep recherche dans l'historique des commandes

git

alias commande explication
g git
gcam git commit -a -m
ga git add
gaa git add --all
gst git status gs déjà utilisé pour GhostScript
gd git diff
ggp git push origin $(current_branch)
gba git branch -a

debian - alias apt

adg sudo apt-get update && sudo apt-get upgrade
ai sudo apt-get install
ar sudo apt-get remove
apt-list-packages liste les packages installés par taille
apt-history historique des packages installés, màj, supprimés

Erreurs

Après l'autocomplétion, 2 caractères restent affichés

Définir une locale