1022 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			Bash
		
	
	
	
			
		
		
	
	
			1022 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			Bash
		
	
	
	
| # /etc/zsh/zshrc ou ~/.zshrc
 | ||
| # Fichier de configuration principal de zsh, lu au lancement des shells interactifs
 | ||
| # (et non des shells d'interprétation de fichier)
 | ||
| # Formation Debian GNU/Linux par Alexis de Lattre
 | ||
| # http://formation-debian.via.ecp.fr/
 | ||
| 
 | ||
| ################
 | ||
| # 1. Les alias #
 | ||
| ################
 | ||
| 
 | ||
| # Gestion du 'ls' : couleur & ne touche pas aux accents
 | ||
| alias ls='ls --classify --tabsize=0 --literal --color=auto --show-control-chars --human-readable'
 | ||
| 
 | ||
| # Copie en récursif et qui garde la date des fichiers copiés
 | ||
| #alias cp='cp -Rp'
 | ||
| alias cp='cp -R'
 | ||
| 
 | ||
| # Copie distante, ajout de la récursivité tout le temps:
 | ||
| alias scp='scp -r'
 | ||
| 
 | ||
| # Demande confirmation avant d'écraser un fichier
 | ||
| alias cP='cp --interactive'
 | ||
| alias mv='mv --interactive'
 | ||
| alias rm='rm --interactive'
 | ||
| 
 | ||
| # Raccourcis pour 'ls'
 | ||
| alias ll='ls -l'
 | ||
| alias la='ls -lA'
 | ||
| alias llm='ls -l | $PAGER'
 | ||
| alias lll='ls -l | less'
 | ||
| ##Classer par date
 | ||
| alias llt='ls -l -t -h -r'
 | ||
| alias lld='ls -l -d */ -h'
 | ||
| alias l.='ls -d .*'
 | ||
| alias lr='ls -R | grep ":$" | sed -e '\''s/:$//'\'' -e '\''s/[^-][^\/]*\//--/g'\'' -e '\''s/^/   /'\'' -e '\''s/-/|/'\'''
 | ||
| 
 | ||
| # Faire en sorte que sudo puisse également utiliser les alias! (c'est l'espace qui fait toute la différence)
 | ||
| # `man zshall` partie Aliasing: "If the text ends with a space, the next word in the shell input is treated as though it were in command position for
 | ||
| # purposes of alias expansion. "
 | ||
| if [ ${USER} != "root" ]; then
 | ||
|   alias sudo='sudo '
 | ||
|   alias s='sudo '
 | ||
|   alias si='sudo iptables -L -vn '
 | ||
|   alias sp='sudo puppet agent -t '
 | ||
|   alias sv='sudo vi '
 | ||
|   alias sz='sudo zsh '
 | ||
| else
 | ||
|   alias sudo='sudo '
 | ||
|   alias s='sudo '
 | ||
|   alias si='iptables -L -vn '
 | ||
|   alias sp='puppet agent -t '
 | ||
|   alias sv='vi '
 | ||
| fi
 | ||
| 
 | ||
| # Raccourcis pour cat
 | ||
| alias ca='cat -n'
 | ||
| 
 | ||
| # Envoyer une notification via libnotify-bin (fin d'une commande, ...)
 | ||
| # Nécessite le paquet libnotify-bin
 | ||
| alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
 | ||
| 
 | ||
| # Recherche d'un mot dans des fichiers
 | ||
| alias grep='grep --color=always -i '
 | ||
| alias gerp='grep -i'
 | ||
| ##Sensisble à la casse
 | ||
| alias Grep='grep '
 | ||
| 
 | ||
| # Nettoyage de l'écran
 | ||
| alias c='clear'
 | ||
| # Liste le contenu du dossier
 | ||
| alias dir='dir --color=always'
 | ||
| # Pour utiliser less avec de la couleur par défaut
 | ||
| alias less='less -r'
 | ||
| #alias less='less --quiet'
 | ||
| 
 | ||
| # Page de manuel en anglais
 | ||
| alias mane="LANG=C man "
 | ||
| 
 | ||
| # Affichage le résultat de la commande 'mount' en colonne
 | ||
| mount | column -t
 | ||
| 
 | ||
| # Afficher les lignes trop longues sur la ligne suivante plutot que de remplacer par un "$":
 | ||
| alias most='most -w'
 | ||
| 
 | ||
| # Commandes de gestion des paquets pour aptitude ou yum
 | ||
| if [ -d /etc/apt ]; then
 | ||
|   alias update='aptitude update'
 | ||
|   alias show='aptitude show'
 | ||
|   alias se='aptitude search'
 | ||
|   alias ins='aptitude install'
 | ||
|   alias insexperimental='aptitude -t experimental install'
 | ||
|   alias up='aptitude update && aptitude full-upgrade && aptitude clean'
 | ||
|   alias version='apt-show-versions'
 | ||
|   alias pol='apt-cache policy '
 | ||
| else
 | ||
|   alias update='yum update'
 | ||
|   alias up='yum update'
 | ||
|   alias show='yum info'
 | ||
|   alias se='yum search'
 | ||
|   alias ins='yum install'
 | ||
|   alias version='yum info &1|grep "Version"'
 | ||
| fi
 | ||
| 
 | ||
| # Espace disque
 | ||
| alias df='df -kTh'
 | ||
| alias dus='du * -sh'
 | ||
| 
 | ||
| # Gestion des processus:
 | ||
| # Si htop n'est pas installé sur la machine:
 | ||
| if [ ! -f "`which htop`" ]; then
 | ||
|   alias htop=top
 | ||
| fi
 | ||
| 
 | ||
| # Qu'est-ce qui consomme de la mémoire vive sur le système
 | ||
| alias wotgobblemem='ps -o time,ppid,pid,nice,pcpu,pmem,user,comm -A | sort -n -k 6 | tail -15'
 | ||
| 
 | ||
| 
 | ||
| # Décompression
 | ||
| alias untargz='tar -zxvf'
 | ||
| alias untarbz2='tar -jxvf'
 | ||
| 
 | ||
| # Screen
 | ||
| #alias totod='screen -c ~/.screen/scr.toto'
 | ||
| #alias toto='screen -x toto'
 | ||
| #alias toto='screen -Rd toto -c ~/.screen/scr.toto'
 | ||
| #alias toto='tmux attach -f ~/.tmux.conf -d -t 0'
 | ||
| alias toto='tmux a -t 0 '
 | ||
| alias ci='screen -x ssh || screen -c ~/.screen/scr.ssh_ci'
 | ||
| 
 | ||
| ## Git
 | ||
| # Télécharger et merge les maj
 | ||
| alias gpull='git pull '
 | ||
| # Appliquer les changements dans le dépôt
 | ||
| function commit {
 | ||
|   git commit -m "`echo "$*" | sed -e 's/^./\U&\E/g'`"
 | ||
| }
 | ||
| alias gco='git commit'
 | ||
| alias gcom='commit '
 | ||
| # Envoyer les changements au dépôt maitre
 | ||
| alias gpush='git push origin master'
 | ||
| # Supprimer un fichier du dépôt
 | ||
| alias grm='git rm '
 | ||
| # Déplacer/rennomer un fichier
 | ||
| alias gmv='git mv '
 | ||
| # Montrer l'état de la branche active
 | ||
| alias gstatus='git status'
 | ||
| # Recherche dans le dépôt en ajoutant le numéro de la ligne et de la couleur
 | ||
| alias ggrep='git grep --color -n -P'
 | ||
| # Voir les logs d'un dépôt git (à la manière de gitk, dans un terminal)
 | ||
| alias glog="git log --graph --full-history --all --color --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' | $PAGER"
 | ||
| 
 | ||
| 
 | ||
| # Lister les fichiers de configuration inutiles
 | ||
| alias purge='grep-status -n -sPackage -FStatus config-files'
 | ||
| 
 | ||
| ## Alias avec pipe
 | ||
| alias -g H='| head'
 | ||
| alias -g T='tail -f'
 | ||
| alias -g G='| grep'
 | ||
| alias -g L='| less'
 | ||
| alias -g M="| most"
 | ||
| alias -g B="&|"
 | ||
| alias -g HL="--help"
 | ||
| alias -g MM="2>&1 | most"
 | ||
| alias -g LL="2>&1 | less"
 | ||
| alias -g CA="2>&1 | cat -A"
 | ||
| alias -g NE="2> /dev/null"
 | ||
| alias -g NUL="> /dev/null 2>&1"
 | ||
| 
 | ||
| ## Affichage de l'historique
 | ||
| if [ "$PAGER" = "most" ]; then
 | ||
|   # En commencant par la fin avec most (bidouillage, on est pas sensé avoir ):
 | ||
|   alias hist="fc -El 0 | most +$HISTSIZE"
 | ||
|   #alias hist="most +$HISTSIZE ~/.zsh/history"
 | ||
|   # Une fois dans un fichier avec most, la touche 'B' permet d'aller à la fin du fichier
 | ||
| else
 | ||
|   # En commencant par la fin avec less:
 | ||
|   alias hist="fc -El 0 | less +G"
 | ||
|   #alias hist="less +G ~/.zsh/history"
 | ||
| fi
 | ||
| 
 | ||
| ## Gestion des répertoires
 | ||
| alias u='cd ..'
 | ||
| alias cd..='cd ..'
 | ||
| alias ..='cd ..'
 | ||
| alias ...='cd ../..'
 | ||
| alias ....='cd ../../..'
 | ||
| # Revenir dans le dossier dans lequel on se trouvait précédemment
 | ||
| alias cd-='cd -'
 | ||
| # Afficher la pile des dossiers:
 | ||
| alias dirs='dirs -v'
 | ||
| # Créer les répertoires précédents si ils n'existent pas
 | ||
| alias mkdir='mkdir -p'
 | ||
| # Affiche l'arborescence du répertoire courant
 | ||
| #alias tree="find . | sed 's/[^/]*\//|   /g;s/| *\([^| ]\)/+--- \1/'"
 | ||
| #La commande tree "basique" fait ça très bien ...
 | ||
| 
 | ||
| # Affiche la variable $PATH ligne par ligne
 | ||
| alias path='echo $PATH | tr ":" "\n" '
 | ||
| 
 | ||
| # Edite le dernier fichier d'un dossier
 | ||
| ## Fonctionement:
 | ||
| ## (. correspond au fichier
 | ||
| ## om les classent par date de modification
 | ||
| ## [1] choisit le premier
 | ||
| ##  désactive les options GLOB_DOTS
 | ||
| alias vil='vi *(.om[1]^D)'
 | ||
| # Lancer vi pour qu'il ne conserve aucune trace du fichier
 | ||
| ## Faire précéder la commande d'un espace empêche l'enregistrement dans l'historique du shell
 | ||
| alias vnb='vi -n "+set noundofile" "+set nobackup"'
 | ||
| 
 | ||
| 
 | ||
| # Différence entre deux fichiers
 | ||
| alias diff='colordiff -u'
 | ||
| alias diffs='diff --side-by-side'
 | ||
| 
 | ||
| # Recherche toutes les occurences de l'arguments passé en paramètre dans l'historique des commandes
 | ||
| alias param='fc -l 0 | grep'
 | ||
| 
 | ||
| # Multimédia
 | ||
| ##Extraire la piste audio d'un .avi
 | ||
| alias avi2wav='mplayer -vc dummy -vo null -ao pcm:file=video.wav'
 | ||
| ##Modifie la bar de progression du gestionnaire de téléchargement Axel
 | ||
| alias axel='axel -a --num-connection=20'
 | ||
| 
 | ||
| # Calculatrice en ligne de commande
 | ||
| alias caltos='bc'
 | ||
| 
 | ||
| #alias df='df --human-readable'
 | ||
| #alias du='du --human-readable'
 | ||
| alias m='mutt -y'
 | ||
| alias md='mkdir'
 | ||
| alias rd='rmdir'
 | ||
| 
 | ||
| #Internet
 | ||
| ## Créer un mini serveur web à partir du dossier courant (http://localhost:8002)
 | ||
| alias httpserv='python -m SimpleHTTPServer'
 | ||
| ## Créer un mini serveur web à partir du quel les utilisateurs peuvent uploader des fichiers sur la machine
 | ||
| alias httpup="python /home/${USER}/bin/droopy -m \"Salut, c'est Bob l'éponge, envoi moi un fichier stp.\" -p /home/${USER}/avatar.png -d /media/data/download"
 | ||
| 
 | ||
| ## Limite l'envoi à 3 requêtes pour ping
 | ||
| alias ping="ping -c 3"
 | ||
| 
 | ||
| ## JOSM
 | ||
| alias josm="java -jar -Xmx2048M /opt/josm-tested.jar"
 | ||
| 
 | ||
| #######################################
 | ||
| #Ouverture d'un programme en fonction
 | ||
| #de l'extension du fichier
 | ||
| #######################################
 | ||
| alias -s txt='$PAGER '
 | ||
| alias -s odt='libreoffice --writer '
 | ||
| alias -s rtf='libreoffice --writer '
 | ||
| alias -s doc='libreoffice --writer '
 | ||
| alias -s ods='libreoffice --calc '
 | ||
| alias -s xls='libreoffice --calc '
 | ||
| alias -s html=$BROWSER
 | ||
| alias -s org=$BROWSER
 | ||
| alias -s php=$BROWSER
 | ||
| alias -s com=$BROWSER
 | ||
| alias -s net=$BROWSER
 | ||
| alias -s png='mirage '
 | ||
| alias -s jpg='mirage '
 | ||
| alias -s gif='mirage '
 | ||
| alias -s mp4='smplayer '
 | ||
| alias -s avi='smplayer '
 | ||
| alias -s flv='smplayer '
 | ||
| alias -s pdf='evince '
 | ||
| alias -s log='tail -f'
 | ||
| alias -s conf='vim '
 | ||
| alias -s gz='gunzip '
 | ||
| alias -s bz2='tar -xjvf'
 | ||
| 
 | ||
| 
 | ||
| #######################################
 | ||
| # Raccourcis pour les dossier
 | ||
| # Pour y accéder, faire ~NOM_DU_RACCOURCIS
 | ||
| #######################################
 | ||
| hash -d zsh="/etc/zsh"
 | ||
| hash -d dl="/media/udata/download/"
 | ||
| hash -d sid="/media/udata/config_debian"
 | ||
| hash -d smb="/etc/samba/"
 | ||
| 
 | ||
| 
 | ||
| # Inutile mais fun :p
 | ||
| ##Affiche le calendrier et le jour courant en couleur
 | ||
| #alias ccal='var=$(cal -m); echo "${var/$(date +%-d)/$(echo -e "\033[1;31m$(date +%-d)\033[0m")}"'
 | ||
| alias ccal='var=$(cal); echo "${var/$(date +%-d)/$(echo -e "\033[1;31m$(date +%-d)\033[0m")}"'
 | ||
| 
 | ||
| ##Commande utilisant cowsay (ou PONYSAY!!) pour afficher un message
 | ||
| function bonjour() {
 | ||
|   MIN_TIME=$(date +%M)
 | ||
|   MODULO_MIN=$(($MIN_TIME % 2))
 | ||
|   if [ $MODULO_MIN -eq 0 ]; then
 | ||
|     #echo Bonjour $USER, nous sommes le `date +"%A %e %B %Y"`, et il est : `date +"%H"` h `date +"%M"` | cowsay -f $(/bin/ls /usr/share/cowsay/cows -1 | head -n $(expr $$$(date +%s) % $(ls /usr/share/cowsay/cows | wc -w) + 1) | tail -n 1)
 | ||
|     /home/${USER}/bin/bash_quote | cowsay -f $(/bin/ls /usr/share/cowsay/cows -1 | head -n $(expr $$$(date +%s) % $(ls /usr/share/cowsay/cows | wc -w) + 1) | tail -n 1)
 | ||
|   else
 | ||
|     #echo Bonjour $USER, nous sommes le `date +"%A %e %B %Y"`, et il est : `date +"%H"` h `date +"%M"` | ponythink
 | ||
|     /home/${USER}/bin/bash_quote  | ponythink
 | ||
|   fi
 | ||
| }
 | ||
| 
 | ||
| ##Affiche quelques statistiques à propos de l'ordinateur
 | ||
| alias stat_sys="echo ' ' && uname -a && echo ' '&& uptime &&echo ' '&& df && echo ' '"
 | ||
| 
 | ||
| #####################################
 | ||
| #####FONCTIONS
 | ||
| ######################################
 | ||
| 
 | ||
| ## Verrouiller le shell avec vlock
 | ||
| #function TRAPALRM() { vlock }
 | ||
| 
 | ||
| ##Cree le repertoire et va dedans
 | ||
| function mkcd() {
 | ||
|   mkdir $1 && cd $1
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| #liste les alias et functions
 | ||
| function listalias(){
 | ||
|   cat /etc/zsh/zshrc | egrep "alias|function" | grep -v "^#" | $PAGER
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| #Récupère l'adresse IP publique
 | ||
| function ippub()
 | ||
| {
 | ||
|   #curl ifconfig.me
 | ||
|   wget http://checkip.dyndns.org/ -O - -o /dev/null | cut -d" " -f 6 | cut -d\< -f 1
 | ||
| }
 | ||
| #lynx --dump http://www.whatismyip.com/|grep Your|awk '{print $4}'
 | ||
| 
 | ||
| 
 | ||
| #Récupère l'adresse IP (privee)
 | ||
| function ippriv()
 | ||
| {
 | ||
|   echo "eth0: `ifconfig eth0|grep "inet adr"|awk '{print $2}'|awk -F ':' '{print $2}'`"
 | ||
|   echo "wlan0: `ifconfig wlan0|grep "inet adr"|awk '{print $2}'|awk -F ':' '{print $2}'`"
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| #Renomme les fichiers en minuscule
 | ||
| function lowercase()
 | ||
| {
 | ||
|   for file ; do
 | ||
|     filename=${file##*/}
 | ||
|     case "$filename" in
 | ||
|     */*) dirname==${file%/*} ;;
 | ||
|     *) dirname=.;;
 | ||
|     esac
 | ||
|     nf=$(echo $filename | tr A-Z a-z)
 | ||
|     newname="${dirname}/${nf}"
 | ||
|     if [ "$nf" != "$filename" ]; then
 | ||
|       mv "$file" "$newname"
 | ||
|       echo "lowercase: $file --> $newname"
 | ||
|     else
 | ||
|       echo "lowercase: $file not changed."
 | ||
|     fi
 | ||
|   done
 | ||
| }
 | ||
| 
 | ||
| ##Capture d'écran
 | ||
| function printscreen()
 | ||
| {
 | ||
|   scrot -s -e 'gimp $f ; rm -rf $f'
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| ## Latex:
 | ||
| ##Redéfinition de pdflatex:
 | ||
| # La commande pdflatex est exécutée deux fois pour permettre la construction de l'index
 | ||
| function pdflatex()
 | ||
| {
 | ||
|   # On récupère le nom du fichier sans l'extension
 | ||
|   file_name="${1:r}"
 | ||
|   # Le fichier avec l'extension pdf
 | ||
|   pdf="${file_name}.pdf"
 | ||
|   # Dossier temporaire
 | ||
|   temp_dir="temp"
 | ||
| 
 | ||
|   # On supprime le fichier pdf si il est présent
 | ||
|   if [ -f "${pdf}" ]; then
 | ||
|     rm -rf "${pdf}"
 | ||
|   fi
 | ||
| 
 | ||
|   # Si le répertoire temporaire n'existe pas, on le crée
 | ||
|   if [ ! -d "${temp_dir}" ]; then
 | ||
|     mkdir "${temp_dir}"
 | ||
|   fi
 | ||
| 
 | ||
|   # On exécute la commande pour créer le pdf
 | ||
|   /usr/bin/pdflatex -output-directory ${temp_dir} $1
 | ||
|   /usr/bin/pdflatex -output-directory ${temp_dir} $1
 | ||
| 
 | ||
|   # On place le fichier pdf qui est dans le répertoire temporaire dans le répertoire courant
 | ||
|   mv -f "${temp_dir}"/*.pdf .
 | ||
| }
 | ||
| 
 | ||
| #Éteint un pc sous windows à distance
 | ||
| #Nécessite le paquet samba-common
 | ||
| # Arguments:
 | ||
| #  ${1}: l'ip de la machine
 | ||
| #  ${2}: le nom d'utilisateur
 | ||
| #  ${3}: le mot de passe de l'utilisateur
 | ||
| function eteint()
 | ||
| {
 | ||
|   net rpc shutdown -f -I $1 -U $2%$3 -t 10 -C "Arrêt en cours..."
 | ||
| }
 | ||
| 
 | ||
| # Calculatrice en ligne de commande
 | ||
| function calc()
 | ||
| {
 | ||
|   echo "${1}" | bc -l
 | ||
| }
 | ||
| 
 | ||
| # Afficher le code retour de la commande précédente
 | ||
| function cmd_status {
 | ||
|   local exit_code=$?            # exit code of command
 | ||
|   local count=$(jobs | wc -l)   # no. of background jobs
 | ||
| 
 | ||
|   # Report no. of background jobs if >0
 | ||
|   if [ $count -gt 0 ]; then
 | ||
|     echo -n " %{$fg[cyan]%}⎇ %j "
 | ||
|   fi
 | ||
| 
 | ||
|   # Report exit code
 | ||
|   if [ $exit_code -ne 0 ]; then
 | ||
|     echo -n "%{$fg[yellow]%}%?%{$fg[red]%} ✖%{$reset_color%}"
 | ||
|   else
 | ||
|     echo -n "%{$fg[green]%}✔%{$reset_color%}"
 | ||
|   fi
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| # Affiche un rappel des raccourcis pour se déplacer dans vim
 | ||
| function rappel_vim()
 | ||
| {
 | ||
|   echo "\
 | ||
| ##########################################
 | ||
| # Rappel basique pour VIM
 | ||
| ##########################################
 | ||
| # Déplacements basiques :
 | ||
| H       pour se déplacer vers la gauche
 | ||
| J       pour se déplacer vers le bas
 | ||
| K       pour se déplacer vers la droite
 | ||
| L       pour se déplacer vers la droite
 | ||
| 
 | ||
| # Déplacements avancés sur une ligne :
 | ||
| e       pour aller à la fin du mot suivant
 | ||
| w	pour aller au début du mot suivant
 | ||
| b       pour aller à la fin du mot précédent
 | ||
| 0       pour aller en début de ligne
 | ||
| $       pour aller en fin de ligne
 | ||
| ^       pour aller au premier caractère de la ligne qui n'est pas un espace ni une tabulation
 | ||
| f<c>    pour aller jusqu'au caractère <c> vers l'avant
 | ||
| 3f<c>	pour aller jusqu'à la 3ème occurence du caractère <c> vers l'avant
 | ||
| F<c>    pour aller jusqu'au caractère <c> vers l'arrière
 | ||
| nF<c>	pour aller jusqu'à la nème occurence du caractère <c> vers l'arrière
 | ||
| t<c>    pour aller jusqu'au caractère <c> vers l'avant en s'arrêtant avant
 | ||
| T<c>    pour aller jusqu'au caractère <c> vers l'arrière en s'arrêtant avant
 | ||
| 
 | ||
| # Déplacement dans le document :
 | ||
| gg      pour aller au début du document
 | ||
| G       pour aller à la fin du document
 | ||
| nG      pour aller à la ligne <n>
 | ||
| :<n>    pour aller à la ligne <n>
 | ||
| %	pour aller à la parenthèse (acollade, crochet) correspondant
 | ||
| 
 | ||
| # Copier/coller avancé
 | ||
| \"ayy   Copier la ligne courante dans le buffer \"a\"
 | ||
| \"5byy  Copier les 5 lignes sous le curseur dans le buffer \"b\"
 | ||
| <MODE_VISUEL>\"ey   Copier les lignes sélectionnées dans le buffer \"e\"
 | ||
| 
 | ||
| # undo & redo
 | ||
| u      	pour annuler pour annuler la dernière modification
 | ||
| CTRL+R  pour refaire la dernière modification
 | ||
| 
 | ||
| # Gestion du texte
 | ||
| ~       pour inverser la casse du texte sélectionné
 | ||
| # Supprimer le texte du curseur à la fin de la ligne
 | ||
| <mode commande> d$
 | ||
| <mode insertion> CTRL-o D
 | ||
| # Supprimer le texte du curseur au début de la ligne
 | ||
| <mode commande> d^
 | ||
| " | $PAGER
 | ||
| }
 | ||
| 
 | ||
| # Affiche un rappel des raccourcis pour se déplacer dans vim
 | ||
| function rappel_vim_avance()
 | ||
| {
 | ||
|   echo "\
 | ||
| ##########################################
 | ||
| # Utilisation un peu plus avancée de VIM
 | ||
| ##########################################
 | ||
| # nom fichier
 | ||
| # Avec par exemple un fichier qui s'appelle fichier.tex dans /home/limax/Documents/
 | ||
| 
 | ||
| # est le nom du fichier en cours
 | ||
| :!echo % (renvoie /Documents/fichier.tex )
 | ||
| :!echo %:r (renvoie /Documents/fichier )
 | ||
| :!echo %:e (renvoie tex )
 | ||
| :!echo %:t (renvoie fichier.tex )
 | ||
| :!echo %:p (renvoie /home/limax/Documents/fichier.tex )
 | ||
| :!echo %:t (renvoie fichier.tex )
 | ||
| :!echo %:h (renvoie Documents)
 | ||
| # Par exemple pour ouvrir le pdf avec lesspipe
 | ||
| :!lesspipe %:r.pdf
 | ||
| 
 | ||
| # Indentation
 | ||
| # Pour réindenter du texte:
 | ||
| mode visuel
 | ||
| - sélectionner toutes les lignes à indenter correctement
 | ||
| touche \"=\"
 | ||
| # Pour décaler plusieurs lignes de plusieurs tabulations:
 | ||
| mode visuel
 | ||
| - sélectionner toutes les lignes à décaler
 | ||
| :>>>
 | ||
| 
 | ||
| # Commande
 | ||
| # Pour exécuter une seule commande à partir du mode insertion
 | ||
| <mode insertion> CTRL-o suivi de la commande à exécuter
 | ||
| 
 | ||
| # Code touche
 | ||
| # Pour afficher le code clavier d'une touche spéciale en mode insertion:
 | ||
| <mode insertion> CTRL-V
 | ||
| # Pour afficher le code interne d'une touche spéciale:
 | ||
| <mode insertion> CTRL-K
 | ||
| # Pour obtenir le code ascii d'un caractère:
 | ||
| ga
 | ||
| 
 | ||
| # Plier/déplier
 | ||
| zm  Plier tout le document sur un niveau de plus
 | ||
| zr  Déplier tout le document sur un niveau de plus
 | ||
| zc  Plier un bloc/fonction/class
 | ||
| zo  Déplier un bloc/fonction/class
 | ||
| 
 | ||
| 
 | ||
| " | $PAGER
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| # Affiche un rappel pour l'édition de fichier Latex
 | ||
| function rappel_latex()
 | ||
| {
 | ||
|   echo "\
 | ||
| -\\/-           Permet d'afficher -- et non un tiret cadratin
 | ||
| Ligne vide      Permet un retour à la ligne entre deux textes
 | ||
| \\ldots         Affiche correctement \"...\"
 | ||
| 
 | ||
| 
 | ||
| # itemize
 | ||
| Mettre un \\vspace{0.5cm} après une liste?
 | ||
| Laisser une ligne vide après une commande root dans une liste?
 | ||
| 
 | ||
| # À faire
 | ||
| Ajouter un style pour les notes d'informations
 | ||
| Ajouter un style pour les notes importantes
 | ||
| 
 | ||
| 
 | ||
| " |  $PAGER
 | ||
| }
 | ||
| 
 | ||
| ## Vérifier les logins et logouts de tous les comptes incluant le mien.
 | ||
| watch=all
 | ||
| # Vérifie toutes les 30 secondes
 | ||
| logcheck=30
 | ||
| # Change le format de watch pour quelques chose avec plus d'informations
 | ||
| #  %n = username, %M = hostname, %a = action, %l = tty, %T = time,
 | ||
| #  %W = date
 | ||
| WATCHFMT="%n from %M has %a tty%l at %T %W"
 | ||
| 
 | ||
| 
 | ||
| # Crypte le fichier passer en paramètre en utilisant le certificat public
 | ||
| #   de l'utilisateur.
 | ||
| # Arguments:
 | ||
| #  ${1}: fichier à crypter
 | ||
| #  ${2}:
 | ||
| function crypt()
 | ||
| {
 | ||
|   openssl smime -encrypt -aes128 -in ${1} -out .${1}.ls ~/.openssl/mycert.crt
 | ||
| }
 | ||
| 
 | ||
| # Décrypte le fichier passer en paramètre en fonction de la clef ssl de
 | ||
| #   l'utilisateur et trouve la ligne contenant le mot rechercher par l'user
 | ||
| # Arguments:
 | ||
| #  ${1}: le fichier à décrypter
 | ||
| #  ${2}: le paramètre rechercher dans le fichier
 | ||
| function getpdw()
 | ||
| {
 | ||
|   openssl smime -decrypt -in ${1} -inkey ~/.openssl/mykey.key | grep ${2}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| # Décrypte le fichier passer en paramètre en fonction de la clef ssl de
 | ||
| #   l'utilisateur et le fichier de sorti est le second paramètre
 | ||
| # Arguments:
 | ||
| #  ${1}: le fichier à décrypter
 | ||
| #  ${2}: le fichier de sorti
 | ||
| function decrypt()
 | ||
| {
 | ||
|   openssl smime -decrypt -in ${1} -out ${2} -inkey ~/.openssl/mykey.key
 | ||
| }
 | ||
| 
 | ||
| # Traduire en français avec Gogole:
 | ||
| function tradfr()
 | ||
| {
 | ||
|   wget -U "Mozilla/5.0" -qO - "http://translate.google.com/translate_a/t?client=t&text=${*}&sl=auto&tl=fr" | sed 's/\[\[\[\"//' | cut -d \" -f 1
 | ||
| }
 | ||
| 
 | ||
| # Traduire du français à l'anglais avec Gogole:
 | ||
| function traden()
 | ||
| {
 | ||
|   wget -U "Mozilla/5.0" -qO - "http://translate.google.com/translate_a/t?client=t&text=${*}&sl=fr&tl=en" | sed 's/\[\[\[\"//' | cut -d \" -f 1
 | ||
| }
 | ||
| 
 | ||
| # Traduire le texte (1er argument) de la langue source (2nd argument) dans la langue de destination (3ème argument)
 | ||
| function translate()
 | ||
| {
 | ||
|   wget -U "Mozilla/5.0" -qO - "http://translate.google.com/translate_a/t?client=t&text=${1}&sl=${2}&tl=${3}" | sed 's/\[\[\[\"//' | cut -d \" -f 1
 | ||
| }
 | ||
| 
 | ||
| ################################################
 | ||
| # 2. Prompt et définition des touches basiques #
 | ||
| ################################################
 | ||
| 
 | ||
| # Prompt couleur (la couleur n'est pas la même pour le root et
 | ||
| # pour les simples utilisateurs)
 | ||
| # Définition des couleurs:
 | ||
| bleu_clair="[36;1m"
 | ||
| bleu_fonce="[34;1m"
 | ||
| rouge="[31m"
 | ||
| jaune="[33m"
 | ||
| blanc="[37m"
 | ||
| vert="[32m"
 | ||
| couleur_normale="[0m"
 | ||
| # Définition du texte du prompt
 | ||
| heure="%{$bleu_clair%}%T"
 | ||
| user="%{$bleu_fonce%}%n"
 | ||
| user_root="%{$rouge%}%n"
 | ||
| at="%{$jaune%}@"
 | ||
| host="%{$blanc%}%m"
 | ||
| repertoire_courant="%{$vert%}%c"
 | ||
| repertoire_absolu="%{$vert%}%d"
 | ||
| # Chemin du répertoire courant en relatif à ~
 | ||
| repertoire_relatif="%{$vert%}%~"
 | ||
| root="%{$jaune%}%#"
 | ||
| noroot="%{$jaune%}%%"
 | ||
| normal="%{$couleur_normale%}"
 | ||
| # Définition du prompt
 | ||
| if [ "`id -u`" -eq 0 ]; then ## Root
 | ||
|   export PS1="$heure $user_root$at$host $repertoire_courant$root $normal"
 | ||
| #  export PS1="%{$bleu_clair%T %{$rouge%n%{$jaune@%{$blanc%m %{$vert%c%{$jaune%#%{[0m%} "
 | ||
| else ## Simple utilisateur
 | ||
|   export PS1="$heure $user$at$host $repertoire_courant$noroot $normal"
 | ||
| fi
 | ||
| 
 | ||
| 
 | ||
| # Prise en charge des touches [début], [fin] et autres
 | ||
| typeset -A key
 | ||
| 
 | ||
| key[Home]=${terminfo[khome]}
 | ||
| key[End]=${terminfo[kend]}
 | ||
| key[Insert]=${terminfo[kich1]}
 | ||
| key[Delete]=${terminfo[kdch1]}
 | ||
| key[Up]=${terminfo[kcuu1]}
 | ||
| key[Down]=${terminfo[kcud1]}
 | ||
| key[Left]=${terminfo[kcub1]}
 | ||
| key[Right]=${terminfo[kcuf1]}
 | ||
| key[PageUp]=${terminfo[kpp]}
 | ||
| key[PageDown]=${terminfo[knp]}
 | ||
| 
 | ||
| [[ -n "${key[Home]}"    ]]  && bindkey  "${key[Home]}"    beginning-of-line
 | ||
| [[ -n "${key[End]}"     ]]  && bindkey  "${key[End]}"     end-of-line
 | ||
| [[ -n "${key[Insert]}"  ]]  && bindkey  "${key[Insert]}"  overwrite-mode
 | ||
| [[ -n "${key[Delete]}"  ]]  && bindkey  "${key[Delete]}"  delete-char
 | ||
| [[ -n "${key[Up]}"      ]]  && bindkey  "${key[Up]}"      up-line-or-history
 | ||
| [[ -n "${key[Down]}"    ]]  && bindkey  "${key[Down]}"    down-line-or-history
 | ||
| [[ -n "${key[Left]}"    ]]  && bindkey  "${key[Left]}"    backward-char
 | ||
| [[ -n "${key[Right]}"   ]]  && bindkey  "${key[Right]}"   forward-char
 | ||
| [[ -n "${key[PageUp]}"   ]] && bindkey  "${key[PageUp]}"   history-beginning-search-backward
 | ||
| [[ -n "${key[PageDown]}" ]] && bindkey  "${key[PageDown]}" history-beginning-search-forward
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| # Titre de la fenêtre d'un xterm
 | ||
| case $TERM in
 | ||
|    xterm*)
 | ||
|        precmd () {print -Pn "\e]0;%n@%m: %~\a"}
 | ||
|        ;;
 | ||
| esac
 | ||
| 
 | ||
| # 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`"
 | ||
|   fi
 | ||
| fi
 | ||
| 
 | ||
| 
 | ||
| #######################################
 | ||
| # 3. Comportement ligne de commandes  #
 | ||
| #######################################
 | ||
| # La ligne de commande dans zsh peut fonctionner suivant différents schémas (options).
 | ||
| # Les principaux que je vais utiliser sont fait pour la ligne de commande dans zhs se
 | ||
| #   comporte à la vim. Il y a donc un mode commande/normal et un mode insertion.
 | ||
| 
 | ||
| # Afficher le mode courant dans le prompt de droite (normal|insertion)
 | ||
| function zle-line-init zle-keymap-select {
 | ||
|   RPS1="$(cmd_status) ${${KEYMAP/vicmd/-CMD-}/(main|viins)/-INS-}"
 | ||
|   RPS2=$RPS1
 | ||
|   zle reset-prompt
 | ||
| }
 | ||
| 
 | ||
| # easy color names in this config
 | ||
| autoload -U colors && colors
 | ||
| 
 | ||
| # Chargement des keymaps
 | ||
| zle -N zle-line-init
 | ||
| zle -N zle-keymap-select
 | ||
| 
 | ||
| ### Raccourcis communs à tous les modes
 | ||
| autoload -U   edit-command-line
 | ||
| zle -N        edit-command-line
 | ||
| bindkey           ''      edit-command-line                     # Ouvrir la commande actuelle dans l'éditeur
 | ||
| bindkey           ''      history-incremental-search-backward   # Recherche incrémentale qui monte dans l'historique
 | ||
| #bindkey           ''      history-incremental-search-forward    # Recherche incrémentale qui descend dans l'historique
 | ||
| 
 | ||
| ### Raccourcis spécifiques au mode insertion
 | ||
| bindkey -M viins  ''      beginning-of-line                     # Début de ligne
 | ||
| bindkey -M viins  ''      vi-forward-blank-word-end             # Fin du mot courant
 | ||
| #bindkey -M viins  ''      vi-forward-blank-word                 # Début du mot suivant
 | ||
| bindkey -M viins  ''      vi-backward-word                      # Début du mot précédent
 | ||
| bindkey -M viins  ''      vi-find-prev-char                     # Rechercher la précédente occurence d'une lettre
 | ||
| #bindkey -M viins  ' ;'     vi-repeat-find                        # Aller à la prochaine occurence de la lettre recherchée
 | ||
| 
 | ||
| ### Raccourcis spécifiques au mode commande
 | ||
| # Le mode commande dispose déjà de la plupart d'un fonctionnement très semblable
 | ||
| #   au mode normal de vim. Seul problème pour le moment, l'absence d'un mode visuel.
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ###########################################
 | ||
| # 4. Options de zsh (cf 'man zshoptions') #
 | ||
| ###########################################
 | ||
| 
 | ||
| # Je ne veux JAMAIS de beeps
 | ||
| unsetopt beep
 | ||
| unsetopt hist_beep
 | ||
| unsetopt list_beep
 | ||
| 
 | ||
| # Redirection de la sortie:
 | ||
| # >| 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
 | ||
| # Attend 10 secondes avant d'exécuter une commande rm qui contient un * (asterisk).
 | ||
| setopt rmstarwait
 | ||
| 
 | ||
| # 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
 | ||
| # Si on utilise des jokers dans une liste d'arguments, retire les jokers
 | ||
| # qui ne correspondent à rien au lieu de donner une erreur
 | ||
| setopt nullglob
 | ||
| 
 | ||
| # Désactivé le raccourcis '='
 | ||
| # Par défaut, `ls -l =vim` indiquera l'emplacement de vim.
 | ||
| # =vim équivaut à `which vim`
 | ||
| #setopt noequals
 | ||
| 
 | ||
| ## Activation des fonctions internes de ZSH:
 | ||
| # Liste des fonctions disponibles:
 | ||
| #zcalc : une calculatrice (plus besoin de bc ou autres expr)
 | ||
| #zargs : un super xargs
 | ||
| #zmv : une commande permettant de faire du renommage/déplaçage en masse de fichiers.
 | ||
| #zftp : un client ftp natif
 | ||
| autoload -U zfinit
 | ||
| zfinit
 | ||
| 
 | ||
| # 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 ferme
 | ||
| unsetopt hup
 | ||
| 
 | ||
| # Lancer le manuel en se placant sur une commande et en faisant {ESC,ALT}+{H,h}
 | ||
| autoload -U run-help
 | ||
| 
 | ||
| ## Gestion de la pile des dossiers:
 | ||
| # Taille maximale de la pile placé dans zshenv
 | ||
| # L'exécution de "cd" met le répertoire d'où l'on vient sur la pile
 | ||
| setopt auto_pushd
 | ||
| # Ignore les doublons dans la pile
 | ||
| setopt pushd_ignore_dups
 | ||
| # N'affiche pas la pile après un "pushd" ou "popd"
 | ||
| setopt pushd_silent
 | ||
| # Inverse l'action de cd +1 et cd +1
 | ||
| setopt pushdminus
 | ||
| # "pushd" sans argument = "pushd $HOME"
 | ||
| setopt pushd_to_home
 | ||
| ## Pour bien utiliser la pile:
 | ||
| # `dirs` va afficher la pile
 | ||
| # `cd -NUMÉRO` ira dans le dossier correspondant au numéro du dossier dans la pile
 | ||
| 
 | ||
| ## Dirstack
 | ||
| DIRSTACKSIZE=20
 | ||
| setopt autopushd pushdsilent pushdtohome
 | ||
| ## Remove duplicate entries
 | ||
| setopt pushdignoredups
 | ||
| ## This reverts the +/- operators.
 | ||
| setopt pushdminus
 | ||
| 
 | ||
| #DIRSTACKFILE="$HOME/.zsh/cache/dirs"
 | ||
| #if [[ -f $DIRSTACKFILE ]] && [[ $#dirstack -eq 0 ]]; then
 | ||
|   #dirstack=( ${(f)"$(< $DIRSTACKFILE)"} )
 | ||
|   #[[ -d $dirstack[1] ]] && cd $dirstack[1]
 | ||
| #fi
 | ||
| 
 | ||
| #chpwd() {
 | ||
|   #print -l $PWD ${(u)dirstack} >> $DIRSTACKFILE
 | ||
| #}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ###################################
 | ||
| ###### Options de complétion ######
 | ||
| ###################################
 | ||
| 
 | ||
| # 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
 | ||
| 
 | ||
| # Quand le dernier caractère d'une complétion est '/' et que l'on
 | ||
| # tape 'espace' après, le '/' est effacé
 | ||
| setopt auto_remove_slash
 | ||
| # Ne fait pas de complétion sur les fichiers et répertoires cachés
 | ||
| unsetopt glob_dots
 | ||
| 
 | ||
| # Traite les liens symboliques comme il faut
 | ||
| setopt 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 prompt
 | ||
| setopt 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
 | ||
| 
 | ||
| 
 | ||
| ###############################################
 | ||
| # 5. Paramètres de l'historique des commandes #
 | ||
| ###############################################
 | ||
| 
 | ||
| # Définition des variables
 | ||
| SAVEHIST=5000
 | ||
| HISTSIZE=5000
 | ||
| HISTFILE=$HOME/.zsh/history
 | ||
| #export TIMEFMT="%E"
 | ||
| 
 | ||
| export SAVEHIST HISTSIZE HISTFILE
 | ||
| 
 | ||
| # Toutes les sessions zsh partage le même historique
 | ||
| #setopt SHARE_HISTORY
 | ||
| 
 | ||
| # Ajoute l'historique à la fin de l'ancien fichier
 | ||
| #setopt append_history
 | ||
| 
 | ||
| # Chaque ligne est ajoutée dans l'historique à mesure qu'elle est tapée
 | ||
| setopt inc_append_history
 | ||
| 
 | ||
| # Ne stocke pas une ligne dans l'historique si elle est identique à la
 | ||
| # précédente
 | ||
| setopt hist_ignore_dups
 | ||
| 
 | ||
| # Supprime les  répétitions dans le fichier  d'historique, ne conservant
 | ||
| # que la dernière occurrence ajoutée
 | ||
| #setopt hist_ignore_all_dups
 | ||
| 
 | ||
| # Supprime les répétitions dans l'historique lorsqu'il est plein, mais
 | ||
| # pas avant
 | ||
| setopt hist_expire_dups_first
 | ||
| 
 | ||
| # N'enregistre  pas plus d'une fois  une même ligne, quelles  que soient
 | ||
| # les options fixées pour la session courante
 | ||
| #setopt hist_save_no_dups
 | ||
| 
 | ||
| # La recherche dans  l'historique avec l'éditeur de commandes de zsh ne
 | ||
| # montre  pas  une même  ligne  plus  d'une fois,  même  si  elle a  été
 | ||
| # enregistrée plusieurs fois
 | ||
| setopt hist_find_no_dups
 | ||
| 
 | ||
| # Affichage de la date du début de la commande et sa durée (depuis epoch)
 | ||
| # Culture time: epoch: 1er janvier 1970
 | ||
| setopt extended_history
 | ||
| 
 | ||
| # Ne pas enregistrer les commandes précédées d'un espace:
 | ||
| setopt hist_ignore_space
 | ||
| 
 | ||
| ###########################################
 | ||
| # 6. Complétion des options des commandes #
 | ||
| ###########################################
 | ||
| 
 | ||
| zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}'
 | ||
| zstyle ':completion:*' max-errors 3 numeric
 | ||
| zstyle ':completion:*' use-compctl false
 | ||
| 
 | ||
| ## Pour la liste des processus que l'on peut kill, avec un menu et couleur
 | ||
| zstyle ':completion:*:*:*:*:processes' menu yes select
 | ||
| #zstyle ':completion:*:*:*:*:processes' force-list always
 | ||
| zstyle ':completion:*:processes' command 'ps -au$USER'
 | ||
| zstyle ':completion:*:*:kill:*:processes' list-colors "=(#b) #([0-9]#)*=36=31"
 | ||
| 
 | ||
| ## Pour éviter de reproposer un argument déjà utiliser dans la commande lors de la complétion
 | ||
| zstyle ':completion:*:(rm|mv|cp|ls|scp):*' ignore-line yes
 | ||
| 
 | ||
| ## cd ne sélectionnera pas le dossier courant lorsqu'il devra remonter d'un dossier
 | ||
| # cd ../<TAB> ne proposera pas le dossier courant par exemple.
 | ||
| zstyle ':completion:*:cd:*' ignore-parents parent pwd
 | ||
| 
 | ||
| ## Pour la liste des fichiers qu'on peut ouvrir avec vim
 | ||
| zstyle ':completion:*:*:vim:*' menu yes select
 | ||
| ## Mettre en cache les résultats de l'auto-complétion car certaines fonctions sont lentes (apt, dpkg, ...)
 | ||
| # Ne pas hésiter à faire un petit aptitude install <TAB> et de lister tous les résultats possibles une première fois, histoire d'avoir tous les paquets en cache (~600ko), ça vaut le coup!
 | ||
| zstyle ':completion:*' use-cache on
 | ||
| zstyle ':completion:*' cache-path ~/.zsh/cache
 | ||
| 
 | ||
| ## Ajout des couleurs pour la complétion
 | ||
| zmodload -i zsh/complist
 | ||
| zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
 | ||
| 
 | ||
| ## Complétion de la commande cd avec les répertoires locaux puis ceux de la variable CDPATH
 | ||
| zstyle ':completion:*:*:cd:*' tag-order local-directories path-directories
 | ||
| 
 | ||
| ## Complétion des commandes ssh avec le contenu du fichier ~/.ssh/config et le contenu de host
 | ||
| local HOSTS
 | ||
| #[[ -f ~/.ssh/config ]] && HOSTS=(`sed -n \'s/^Host \(.*\)/\1/p\' ~/.ssh/config`)
 | ||
| #if [ -f ~/.ssh/config ]; then
 | ||
| #HOSTS=(`grep ^Host ~/.ssh/config | sed s/Host\ // | egrep -v ‘^\*$’`)
 | ||
| #fi
 | ||
| #zstyle ':completion:*:(ssh|scp|sftp|sshfs):*' hosts ${HOSTS}
 | ||
| 
 | ||
| # Complétions pour certains programmes en fonction des extensions
 | ||
| zstyle ':completion:*:*:vlc:*' file-patterns '*.(mkv|MKV|avi|AVI|flv|FLV|mp4|MP4|webm|WEBM|mov|MOV|flac|FLAC|mp3|MP3|ogg|OGG|ogv|OGV|wmv|WMV)\ *(-/):directories'
 | ||
| 
 | ||
| ## Ajout de la complétion pour plusieurs fonctions:
 | ||
| autoload -U compinit
 | ||
| autoload -U zutil
 | ||
| autoload -U complist
 | ||
| # Activation
 | ||
| compinit
 | ||
| 
 | ||
| 
 | ||
| ###########################################
 | ||
| # 7. Création des fichiers et répertoires #
 | ||
| ###########################################
 | ||
| # Dossier .zsh dans le répertoire personnel
 | ||
| if [ ! -d ~/.zsh ]; then
 | ||
|   mkdir ~/.zsh
 | ||
| fi
 | ||
| 
 | ||
| # Fichier contenant l'historique pour chaque utilisateur
 | ||
| if [ ! -f ~/.zsh/history ]; then
 | ||
|   touch ~/.zsh/history
 | ||
| fi
 | ||
| 
 | ||
| # Dossier contenant le cache pour chaque utilisateur
 | ||
| if [ ! -d ~/.zsh/cache ]; then
 | ||
|   mkdir ~/.zsh/cache
 | ||
| fi
 | ||
| 
 | ||
| 
 | ||
| ###########################################
 | ||
| ############## 8. Globbing ################
 | ||
| ###########################################
 | ||
| 
 | ||
| # Activation du globbing étendu
 | ||
| setopt extendedglob
 | ||
| ## '^' inverse la pattern qui suit.
 | ||
| # Exemple:
 | ||
| # `ls ^*.log` listera tous les fichiers exceptés *.log
 | ||
| 
 | ||
| 
 | ||
| 
 |