Réécriture de mon .zshrc
Vincent Bernat
J’utilise Zsh depuis maintenant 10 ans. Il s’agit d’un shell
conçu pour une utilisation interactive mais qui est aussi
assez puissant quand il s’agit d’écrire des scripts. Mon .zshrc
a
accumulé au fil des années un certains nombres de fonctionnalités mais
je voulais le réécrire pour deux raisons :
-
Je n’utilisais pas vraiment les nombreuses fonctionnalités offertes par Zsh comme l’expansion des paramètres, les tableaux, les expressions arithmétiques, etc. J’utilisais beaucoup de
| head
,| awk
,| sed
alors que Zsh sait faire tout cela en interne (et de manière très lisible, comme${${(f)~~"$(</etc/hosts)"}%%\#*}
). -
J’employais énormément de hacks pour accomoder certaines configurations qui n’existent sans doute plus. Il y avait également de nombreuses parties du code qui testaient le nom de la machine avant de s’exécuter. Pas très pratique à transposer sur une autre machine.
Le projet oh-my-zsh
fournit une configuration très
complète et flexible de Zsh. On y trouve une quarantaine de plugins,
de nombreux thèmes et un cadre pour ajouter les fonctionnalités
manquantes. L’idée principale est de forker ce projet et d’y apporter
les modifications que l’on souhaite. J’utilisais auparavant une
version modifiée de l’invite Zsh de Phil! et oh-my-zsh
en
contient une variation sous le nom de jonathan
.
Toutefois, j’ai décidé de repartir de zéro (en reprenant des bonnes
idées sur oh-my-zsh
). En effet, en ce qui concerne le shell, j’aime
bien configurer, à la virgule près, chaque fonctionnalité et
oh-my-zsh
fournit en standard un certain nombre de choses (des
alias, des options, des fonctions) que je ne souhaite pas
utiliser. Plutôt que de supprimer la moitié du code, il me semblait
plus simple de partir de zéro.
Le résultat est disponible sur GitHub. Bien qu’il soit possible de l’utiliser tel quel, il me semble préférable de voler et d’adapter les morceaux de code qui vous intéressent. Voici la capture d’écran de l’invite (il ne reste plus beaucoup d’espace pour écrire) :
Mise à jour (02.2013)
Depuis que j’utilise le gestionnaire de
fenêtres awesome, j’ai abandonné la date en
partie droite de l’invite en raison de son mauvais comportement
lorsque la taille de la fenêtre change. J’ai indiqué la dernière
version de l’invite précédente avec le tag
before-awesome
. Ensuite, je suis passé sur une
invite de type powerline. Celle-ci nécessite une
fonte spécifique. La dernière version de l’invite
précédente est marquée avec le tag
before-powerline
. Voici à quoi ressemble l’invite
actuelle :
À titre d’illustration, voici le bout de code qui initialise la
variable EDITOR
. Il utilise notamment une fonction anonyme (pour
restreindre la portée des variables locales) et un tableau. Pour un
autre exemple, voyez
comment je sélectionne une locale valide.
() { local -a editors local editor editors=( "emacs23 -Q -D -nw" # Fast emacs "jove" "mg" "jed" # Emacs clone "vim" "vi" # vi "editor") # fallback for editor in $editors; do (( $+commands[$editor[(w)1]] )) && { export EDITOR=$editor break } done }
Enjoy !
Mise à jour (07.2011)
L’utilisation des fonctions anonymes a été introduite dans Zsh 4.3.7. Sur une version plus ancienne, le code ci-dessus ne fonctionne pas. J’utilise donc une fonction classique à la place :
__() { local -a editors local editor ... } && __