# /etc/zsh/zshrc ou ~/.zshrc# Fichier de configuration principal de zsh# Formation Debian GNU/Linux par Alexis de Lattre# http://www.via.ecp.fr/~alexis/formation-linux/## 1. Les alias## Gestion du ls : couleur + touche pas aux accentsalias ls='ls --classify --tabsize=0 --literal --color=auto --show-control-chars --human-readable'# Demande confirmation avant d'écraser un fichieralias cp='cp --interactive'alias mv='mv --interactive'alias rm='rm --interactive'# Raccourcis pour 'ls'alias ll='ls -l'alias la='ls -a'alias lla='ls -la'# Quelques alias pratiquesalias c='clear'alias less='less --quiet'alias s='cd ..'alias df='df --human-readable'alias du='du --human-readable'## 2. Prompt et Définition des touches## exemple : ma touche HOME, cf man termcap, est codifiee K1 (upper left# key on keyboard) dans le /etc/termcap. En me referant a l'entree# correspondant a mon terminal (par exemple 'linux') dans ce fichier, je# lis : K1=\E[1~, c'est la sequence de caracteres qui sera envoyee au# shell. La commande bindkey dit simplement au shell : a chaque fois que# tu rencontres telle sequence de caractere, tu dois faire telle action.# La liste des actions est disponible dans "man zshzle".# Correspondance touches-fonctionbindkey '^A' beginning-of-line # Homebindkey '^E' end-of-line # Endbindkey '^D' delete-char # Delbindkey '[3~' delete-char # Delbindkey '[2~' overwrite-mode # Insertbindkey '[5~' history-search-backward # PgUpbindkey '[6~' history-search-forward # PgDn# Prompt couleur (la couleur n'est pas la même pour le root et# pour les simples utilisateurs)if [ "`id -u`" -eq 0 ]; then export PS1="%{[33;36;1m%}%T%{[0m%} %{[33;34;1m%}%n%{[0m[33;33;1m%}@%{[33;37;1m%}%m %{[33;32;1m%}%~%{[0m[33;33;1m%}%#%{[0m%} "else export PS1="%{[33;36;1m%}%T%{[0m%} %{[33;31;1m%}%n%{[0m[33;33;1m%}@%{[33;37;1m%}%m %{[33;32;1m%}%~%{[0m[33;33;1m%}%#%{[0m%} "fi# Console linux, dans un screen ou un rxvtif [ "$TERM" = "linux" -o "$TERM" = "screen" -o "$TERM" = "rxvt" ]then # Correspondance touches-fonction spécifique bindkey '[1~' beginning-of-line # Home bindkey '[4~' end-of-line # Endfi# xtermif [ "$TERM" = "xterm" ]then # Correspondance touches-fonction spécifique bindkey '[H' beginning-of-line # Home bindkey '[F' end-of-line # Endfi# gnome-terminalif [ "$COLORTERM" = "gnome-terminal" ]then # Correspondance touches-fonction spécifique bindkey '^[OH' beginning-of-line # Home bindkey '^[OF' end-of-line # Endfi# Gestion de la couleur pour 'ls' (exportation de LS_COLORS)if [ -x /usr/bin/dircolors ]then if [ -r ~/.dir_colors ] then eval "`dircolors ~/.dir_colors`" elif [ -r /etc/dir_colors ] then eval "`dircolors /etc/dir_colors`" else eval "`dircolors`" fifi## 3. Options de zsh (cf 'man zshoptions')## Je ne veux JAMAIS de beepsunsetopt beepunsetopt hist_beepunsetopt list_beep# >| doit être utilisés pour pouvoir écraser un fichier déjà existant ;# le fichier ne sera pas écrasé avec '>'unsetopt clobber# Ctrl+D est équivalent à 'logout'unsetopt ignore_eof# Affiche le code de sortie si différent de '0'setopt print_exit_value# Demande confirmation pour 'rm *'unsetopt rm_star_silent# Correction orthographique des commandes# Désactivé car, contrairement à ce que dit le "man", il essaye de# corriger les commandes avant de les hasher#setopt correct# Schémas de complétion# - Schéma A :# 1ère tabulation : complète jusqu'au bout de la partie commune# 2ème tabulation : propose une liste de choix# 3ème tabulation : complète avec le 1er item de la liste# 4ème tabulation : complète avec le 2ème item de la liste, etc...# -> c'est le schéma de complétion par défaut de zsh.# Schéma B :# 1ère tabulation : propose une liste de choix et complète avec le 1er item# de la liste# 2ème tabulation : complète avec le 2ème item de la liste, etc...# Si vous voulez ce schéma, décommentez la ligne suivante :#setopt menu_complete# Schéma C :# 1ère tabulation : complète jusqu'au bout de la partie commune et# propose une liste de choix# 2ème tabulation : complète avec le 1er item de la liste# 3ème tabulation : complète avec le 2ème item de la liste, etc...# Ce schéma est le meilleur à mon goût !# Si vous voulez ce schéma, décommentez la ligne suivante :#unsetopt list_ambiguous# (Merci à Youri van Rietschoten de m'avoir donné l'info !)# Options de complétion# Quand le dernier caractère d'une complétion est '/' et que l'on# tape 'espace' après, le '/' est effaçésetopt auto_remove_slash# Fait la complétion sur les fichiers et répertoires cachéssetopt glob_dots# Traite les liens symboliques comme il fautsetopt chase_links# Quand l'utilisateur commence sa commande par '!' pour faire de la# complétion historique, il n'exécute pas la commande immédiatement# mais il écrit la commande dans le promptsetopt hist_verify# Si la commande est invalide mais correspond au nom d'un sous-répertoire# exécuter 'cd sous-répertoire'setopt auto_cd# L'exécution de "cd" met le répertoire d'où l'on vient sur la pilesetopt auto_pushd# Ignore les doublons dans la pilesetopt pushd_ignore_dups# N'affiche pas la pile après un "pushd" ou "popd"setopt pushd_silent# "pushd" sans argument = "pushd $HOME"setopt pushd_to_home# Les jobs qui tournent en tâche de fond sont nicé à '0'unsetopt bg_nice# N'envoie pas de "HUP" aux jobs qui tourent quand le shell se fermeunsetopt hup## 4. Paramètres de l'historique des commandes## Nombre d'entrées dans l'historiqueexport HISTORY=100export SAVEHIST=100# Fichier où est stocké l'historiqueexport HISTFILE=$HOME/.history## 5. Complétion des options des commandes#zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}'zstyle ':completion:*' max-errors 3 numericzstyle ':completion:*' use-compctl falsefunction precmd { local TERMWIDTH (( TERMWIDTH = ${COLUMNS} - 1 )) ### # Truncate the path if it's too long. PR_FILLBAR="" PR_PWDLEN="" local promptsize=${#${(%):---(%n@%m)---()--}} local pwdsize=${#${(%):-%~}} if [[ "$promptsize + $pwdsize" -gt $TERMWIDTH ]]; then ((PR_PWDLEN=$TERMWIDTH - $promptsize)) else PR_FILLBAR="\${(l.(($TERMWIDTH - ($promptsize + $pwdsize)))..${PR_HBAR}.)}" fi ### # Get APM info. if which ibam > /dev/null; then PR_APM_RESULT=`` elif which apm > /dev/null; then PR_APM_RESULT=`` fi}setopt extended_globpreexec () { if [[ "$TERM" == "screen" ]]; then local CMD=${1[(wr)^(*=*|sudo|-*)]} echo -n "\ek$CMD\e\\" fi}setprompt () { ### # Need this so the prompt will work. setopt prompt_subst ### # See if we can use colors. autoload colors zsh/terminfo if [[ "$terminfo[colors]" -ge 8 ]]; then colors fi for color in RED WHITE WHITE GREY MAGENTA GREY WHITE; do eval PR_$color='%{$terminfo[bold]$fg[${(L)color}]%}' eval PR_LIGHT_$color='%{$fg[${(L)color}]%}' (( count = $count + 1 )) done PR_NO_COLOUR="%{$terminfo[sgr0]%}" ### # See if we can use extended characters to look nicer. typeset -A altchar set -A altchar ${(s..)terminfo[acsc]} PR_SET_CHARSET="%{$terminfo[enacs]%}" PR_SHIFT_IN="%{$terminfo[smacs]%}" PR_SHIFT_OUT="%{$terminfo[rmacs]%}" PR_HBAR=${altchar[q]:--} PR_ULCORNER=${altchar[l]:--} PR_LLCORNER=${altchar[m]:--} PR_LRCORNER=${altchar[j]:--} PR_URCORNER=${altchar[k]:--} ### # Decide if we need to set titlebar text. case $TERM in xterm*) PR_TITLEBAR=$'%{\e]0;%(!.-=*[ROOT]*=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} \a%}' ;; screen) PR_TITLEBAR=$'%{\e_screen \005 (\005t) | %(!.-=[ROOT]=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} \e\\%}' ;; *) PR_TITLEBAR='' ;; esac ### # Decide whether to set a screen title if [[ "$TERM" == "screen" ]]; then PR_STITLE=$'%{\ekzsh\e\\%}' else PR_STITLE='' fi ### # APM detection ### # Finally, the prompt. PROMPT='$PR_SET_CHARSET$PR_STITLE${(e)PR_TITLEBAR}\$PR_GREY$PR_SHIFT_IN$PR_ULCORNER$PR_GREY$PR_HBAR$PR_SHIFT_OUT(\$PR_WHITE%(!.%SROOT%s.%n)$PR_LIGHT_RED@$PR_WHITE%m\$PR_GREY)$PR_SHIFT_IN$PR_HBAR$PR_GREY$PR_HBAR${(e)PR_FILLBAR}$PR_GREY$PR_HBAR$PR_SHIFT_OUT(\$PR_WHITE%$PR_PWDLEN<...<%~%<<\$PR_GREY)$PR_SHIFT_IN$PR_HBAR$PR_GREY$PR_URCORNER$PR_SHIFT_OUT\$PR_GREY$PR_SHIFT_IN$PR_LLCORNER$PR_GREY$PR_HBAR$PR_SHIFT_OUT(\\${(e)PR_APM}$PR_WHITE%D{%H:%M}\$PR_LIGHT_GREY$PR_GREY)$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\$PR_GREY$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\$PR_NO_COLOUR ' RPROMPT=' $PR_GREY$PR_SHIFT_IN$PR_HBAR$PR_GREY$PR_HBAR$PR_SHIFT_OUT\($PR_WHITE%D{%a,%d%b}$PR_GREY)$PR_SHIFT_IN$PR_HBAR$PR_GREY$PR_LRCORNER$PR_SHIFT_OUT$PR_NO_COLOUR' PS2='$PR_GREY$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\$PR_GREY$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT(\$PR_LIGHT_WHITE%_$PR_GREY)$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\$PR_GREY$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT$PR_NO_COLOUR '}setpromptautoload -U compinitcompinit