1 Introduction
Ca faisait un moment que j'y pensais, mais j'attendais d'avoir une conf zsh suffisamment sympas pour la publier et puis avec ma galère d'aujourd'hui (rm -Rf * dans le /), je me suis dis qu'il fallait se motiver un peu pour finir rapidement. Donc voici ma conf qui peut être optimiser, mais qui pour le moment est tout de même très bien à l'utilisation :-).
Elle fonctionne sur Linux, Mac, BSD et Windows (Cygwin).
Le contenu des fichiers ci dessous n'est pas forcément à jour. Si vous voulez ma dernière configuration ZSH, voici l'adresse de mon git : http://www.deimos.fr/gitweb
2 Installation
Si vous n'avez pas zsh, installez le le plus simplement possible. Sur Debian par exemple :
apt-get
|
apt-get install zsh
|
3 Configuration
Nous allons configurer le compte courant dans un premier temps et vous verrez si cela vous convient ou non.
3.1 ~/.zshrc
~/.zshrc
|
#!/bin/zsh
# Version detection
ZSH_VERSION_TYPE=old
if [[ $ZSH_VERSION == 3.1.<6->* || $ZSH_VERSION == 3.2.<->* || $ZSH_VERSION == 4.<->* ]] ; then
if which zstyle > /dev/null ; then
ZSH_VERSION_TYPE=new
fi
fi
# Uname system
export MYSYSTEM=`uname`
# If you don't want history enter 1
# Do not forget to delete ~/.zshhistory
export NOHIST="0"
# Using environnement files
for envfile in ~/.zsh/* ; do
test -f $envfile && source $envfile
done
# Default Umask
umask 022
# Make default color
if [ -z "$nocolor" ] ; then
c6 && c2;
else PS1="%n@%m %~ %% "
export PS1
fi
|
Puis créez le dossier .zsh :
mkdir
|
mkdir .zsh
|
3.2 ~/.zsh/alias
~/.zsh/alias
|
#!/bin/zsh
# Usefull alias
alias utar="tar -xvzf"
alias ..='cd ..'
alias ...='cd ../..'
alias uu='source ~/.zshrc &> /dev/null'
# ls
if [ $MYSYSTEM = "Linux" ] ; then
alias ls='ls --color=auto'
alias l='ls --color=auto -lg'
alias ll='ls --color=auto -lag | $PAGER'
fi
if [ $MYSYSTEM = "OpenBSD" ] ; then
if [ -x /usr/local/bin/gls ] ; then
alias ls='gls --color=auto'
alias l='gls --color=auto -lg'
alias ll='gls --color=auto -lag | $PAGER'
else
alias ls='ls'
alias l='ls -lg'
alias ll='ls -lag | $PAGER'
fi
fi
if [ $MYSYSTEM = "Darwin" ] ; then
alias ls='ls -G'
alias l='ls -lGg'
alias ll='ls -lGag | $PAGER'
fi
|
3.3 ~/.zsh/complet
~/.zsh/complet
|
#!/bin/zsh
autoload -U compinit
autoload -U colors
## Check if we are using Cygwin ##
if [ `uname` = "CYGWIN*" ] ; then
compinit -u
else
compinit
fi
zstyle ':completion:*:*:cd:*' tag-order local-directories path-directories
zstyle ':completion:*' menu select=2
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
zstyle ':completion:*:rm:*' ignore-line yes
zstyle ':completion:*:mv:*' ignore-line yes
zstyle ':completion:*:cp:*' ignore-line yes
zstyle ':completion:*' verbose yes
zstyle ':completion:*:descriptions' format '--==[ %B%d%b ]==--'
zstyle ':completion:*:messages' format '--==[ %d ]==--'
zstyle ':completion:*:warnings' format 'No matches for: %d'
zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b'
zstyle ':completion:*' group-name ''
# Color completion
zstyle ':completion:*' list-colors ''
zstyle ':completion:*:*: kill :*:processes' list-colors '=( #b) #([0-9]#)*=0=01;34'
zstyle ':completion:*' list-colors 'di=01;34'
local _myhosts
if [ -d ~/.ssh ]; then
if [ -f ~/.ssh/known_hosts ];then
_myhosts=(${=${${(f)"$(<$HOME/.ssh/known_hosts)"}%%[# ]*}//,/ })
fi
fi
zstyle ':completion:*' hosts $_myhosts
|
3.4 ~/.zsh/env
~/.zsh/env
|
#!/bin/zsh
## Check if we are using Cygwin ##
if [ `uname` = "CYGWIN*" ] ; then
export TERM=cygwin
else
export TERM=xterm-color
fi
usernames=( $(cut -d: -f1 /etc/passwd) )
groups=( $(cut -d: -f1 /etc/group) )
case "$TERM" in
xterm*|rxvt|linux|cygwin)
;;
*)
nocolor=yes
;;
esac
# Set locales
if [ $MYSYSTEM = "SunOS" ] ; then
export LANGUAGE=fr_FR.ISO8859-15
export LC_ALL=fr_FR.ISO8859-15
export LANG=fr_FR.ISO8859-15
else
export LANGUAGE=fr_FR.UTF8
export LC_ALL=fr_FR.UTF8
export LANG=fr_FR.UTF8
fi
export LESSCHARSET=latin9
export MINICOM="-c on"
export LESS="-S -g"
export JAVA_HOME="/usr/lib/jvm/cacao/"
LOGCHECK=60
WATCHFMT="%n has %a %l from %M"
# CVS
export CVS_RSH=/usr/bin/ssh
export CVSROOT=:ext:user@host:/var/lib/cvs
# History
export HISTSIZE=5000
export HISTFILE=$HOME/.zshhistory
if [ $NOHIST = "1" ] ; then
export SAVEHIST=0
else
export SAVEHIST=$HISTSIZE
fi
# Defaut editor
export EDITOR=vim
export LISTMAX=0
# Use most if possible
if [[ -x /usr/bin/most || -x /opt/local/bin/most ]] ; then
export PAGER=most
else
export PAGER=more
fi
export BLOCK_SIZE=human-readable
export LS_COLORS='no=00:fi=00:di=0;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.rar=01,31:*.par2=01,31:*.deb=01;31:*.rpm=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.pgm=01;35:*.pbm=01;35:*.ppm=01;35:*.tga=01;35:*.png=01;35:*.GIF=01;35:*.JPG=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.mpg=01;37:*.avi=00;35:*.gl=01;37:*.dl=01;37:*.mly=01;37:*.mll=01;37:*.mli=01;37:*.ml=01;37:*.cpp=01;37:*.cc=01;37:*.c=01;37:*.hh=01;37:*.h=01;37:*Makefile=4;32:*.pl=4;32:*.sh=4;32:*.ps=01;34:*.pdf=01;34:*TODO=01;37:*TOGO=01;37:*README=01;37:*LINKS=01;37:*.y=01;37:*.l=01;37:*.algo=01;37'
limit core 0
|
3.5 ~/.zsh/fonctions
~/.zsh/fonctions
|
#!/bin/zsh
# Prompt definition
function setprompt { #
export PROMPT="%{$COLOR2%}[%{$COLOR2%}%D{%H:%M:%S}%{$COLOR2%}] %{$COLOR4%}- %{$COLOR3%}[%~%{$COLOR3%}]%{$COLOR4%}
%{$COLOR4%}%n%{$COLOR1%}@%{$COLOR4%}%m%{$COLOR3%}%{$COLOR1%} %{$COLOR1%}>%{$COLOR1%}%{$COLOR1%} "
export RPROMPT="%{^[[A%}%{$COLOR3%}[%{$COLOR6%}%D{%d-%m-%Y}%{$COLOR3%}]%{$COLOR5%}%{^[[B%}"
export PROMPT2="%{$COLOR3%}[%{$COLOR1%}%(#.#.$)%{$COLOR3%}]%{$COLOR4%} "
export SPROMPT="%{$COLOR3%}[%{$COLOR1%}correct%{$COLOR3%}[%{$COLOR1%}'%R'%{$COLOR3%}]%{$COLOR1%}->%{$COLOR3%}[%{$COLOR1%}'%r'%{$COLOR3%}]] [%{$COLOR1%}n%{$COLOR3%}/%{$COLOR1%}y%{$COLOR3%}/%{$COLOR1%}a%{$COLOR3%}/%{$COLOR1%}e%{$COLOR3%}]%{$COLOR4%} "
}
function c1 {
export COLOR1="^[[0;31m"
export COLOR2="^[[1;31m"
export COLOR3="^[[1;30m"
export COLOR4="^[[0;31m"
setprompt
}
function c2 {
# Rouge
export COLOR1="^[[1;31m"
# Vert
export COLOR2="^[[1;32m"
# Blanc
export COLOR3="^[[1;33m"
# Bleu
export COLOR4="^[[1;34m"
# Gris
export COLOR5="^[[0;37m"
# Violet
export COLOR6="^[[1;35m"
setprompt
}
function c3 {
export COLOR1="^[[0;33m"
export COLOR2="^[[1;33m"
export COLOR3="^[[1;30m"
export COLOR4="^[[0;33m"
setprompt
}
function c4 {
export COLOR1="^[[0;34m"
export COLOR2="^[[1;34m"
export COLOR3="^[[1;30m"
export COLOR4="^[[0;34m"
setprompt
}
function c5 {
export COLOR1="^[[0;35m"
export COLOR2="^[[1;35m"
export COLOR3="^[[1;30m"
export COLOR4="^[[0;35m"
setprompt
}
function c6 {
export STATUS_WR="^[[4;37m"
export STATUS_COLOR="^[[1;33m"
export LOGIN_COLOR="^[[0;40m"
export HOST_COLOR="^[[1;37m"
export COLOR1="^[[0;37m"
export COLOR2="^[[0;33m"
export COLOR3="^[[0;31m"
export COLOR4="^[[0;0m"
setprompt
}
function c7 {
export COLOR1="^[[0;37m"
export COLOR2="^[[1;37m"
export COLOR3="^[[1;30m"
export COLOR4="^[[0;0m"
setprompt
}
|
3.6 ~/.zsh/path
~/.zsh/path
|
#!/bin/sh
# OpenBSD Respository
test $MYSYSTEM = "OpenBSD" && export PKG_PATH=ftp://ftp.arcane-networks.fr/pub/OpenBSD/`uname -r`/packages/`machine -a`/
# DarwinPorts Mac OS X
if [[ $MYSYSTEM = "Darwin" && -d /opt/local/bin ]] ; then
PATH="$PATH:/opt/local/bin:/opt/local/sbin"
fi
# Solaris
if [[ $MYSYSTEM = "SunOS" && -d /usr/openwin/bin/ ]] ; then
PATH="$PATH:/usr/openwin/bin/:/usr/X11/bin:/opt/csw/bin"
fi
# Define scripts
test -d "$HOME/.scripts" && PATH="$PATH:$HOME/.scripts"
# Define Path
PATH="$PATH:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/bin"
export PATH
|
3.7 ~/.zsh/term
~/.zsh/term
|
#!/bin/zsh
set convert-meta off # Don't strip high bit when reading or displaying.
set input-meta on
set output-meta on
set append history # multiple parallel zsh sessions will all have their history lists added to the history
# No bips
unsetopt beep
unsetopt hist_beep
unsetopt list_beep
unsetopt ignore_eof # Logout Ctrl+D
setopt chase_links # Traite les liens symboliques comme il faut
setopt hist_verify # Ne lance pas la commande quand on chercher dans l'historique avec !
setopt auto_list
setopt auto_cd # Si la commande est invalide mais correspond au nom d'un sous-répertoire exécuter 'cd sous-répertoire'
setopt auto_remove_slash # Quand le dernier caractère d'une complétion est '/' et que l'on tape 'espace' après, le '/' est effaçé
function common_terms () {
bindkey "\e[2~" quoted-insert
bindkey "\e[3~" delete-char
bindkey "\e[5~" beginning-of-history
bindkey "\e[6~" end-of-history
} # Make the Home, End, and Delete keys work on common terminals.
if [[ "$TERM" == "linux" ]] ; then
common_terms
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line
elif [[ "$TERM" == "rxvt" ]] ; then
common_terms
bindkey "\e[7~" beginning-of-line
bindkey "\e[8~" end-of-line
elif [[ "$TERM" == xterm* ]] ; then
common_terms
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line
fi
bindkey -s '^X^Z' '%-^M'
bindkey '^[e' expand-cmd-path
bindkey -s '^X?' '\eb=\ef\C-x*'
bindkey '^[^I' reverse-menu-complete
bindkey '^[p' history-beginning-search-backward
bindkey '^[n' history-beginning-search-forward
bindkey '^W' kill -region bindkey '^I' expand-or-complete-prefix
bindkey -s '^[[Z' '\t'
bindkey '^?' backward-delete-char
if which setterm > /dev/null ; then
setterm -hbcolor bright white
setterm -ulcolor cyan
fi
|
4 Utilisation
Pour l'utilisation, voici quelques trucs de base ou que j'ai implémenté :
- uu : permet de rafraichir son shell (lors de modifications ou d'ajouts de nouveaux softs)
- utar : équivalent à tar -xzvf
- .. : revient à faire cd ..
- ... : reviens à faire cd ../..
Pour le reste, je vous laisse regarder les contenus des fichiers, j'essaye de commenter suffisamment.
Et pour un résultat, on obtient quelquechose comme ceci :
[20:07:45] - [~] [01-10-2009]
pmavro@pm-laptop >