Effacer des noms de fichiers sur la ligne de commande avec Bash
Avec ses réglages par défaut, Bash permet d'effacer un mot sur la ligne de commande avec la combinaison de touches Alt + Retour arrière. C'est pratique, mais pas toujours suffisant.
Imaginons que j'ai des noms de fichiers très longs du type/foo-1687321681/bar-XSDRYJXJ-87215121-GGGG/machin-bidule-truc-981321-RPXS-456456
avec plein de sous-répertoires et de tirets, autrement dit : des noms de fichiers illisibles. Imaginons qu'il est tard, et que j'ai mal aux yeux.
Imaginons que je viens de faire less /foo-1687321681/bar-XSDRYJXJ-87215121-GGGG/machin-bidule-truc-981321-RPXS-456456
et je veux maintenant faire less /foo-1687321681/bar-XSDRYJXJ-87215121-GGGG/zljxdr-bidule-truc-Z34571-WIGJ-0E4576
(et imaginons que je n'avais pas anticipé en faisant d'abord less /foo-1687321681/bar-XSDRYJXJ-87215121-GGGG/*
parce que personne n'est parfait 😉)
Si je reviens sur la ligne de commande précédente, j'ai le curseur juste après le "mot" 456456, et je dois faire plusieurs Alt + Retour arrière. Je ne peux pas faire Ctrl + w qui effacerait tout le nom de fichier et ne laisserait que less
. Comme j'ai mal aux yeux, j'aimerais bien avoir une seule combinaison de touches pour tout effacer jusqu'au slash du répertoire bar-XSDRYJXJ-87215121-GGGG/
Heureusement, Bash a une option : la commande Readline unix-filename-rubout
Pour activer cette commande, il faut choisir une combinaison de touches, par exemple Ctrl + Retour arrière et saisir, soit dans le terminal pour la session en cours, soit dans ~/.bashrc ou ~/.bash_aliases de manière permanente : bind '\C-h:unix-filename-rubout'
Notes :
- Je ne sais pas pourquoi cette commande n'est pas active par défaut parce que je la trouve très pratique.
- Pour lister toutes les combinaisons de touches actives :
bind -P