Recueil d’astuces pour exploiter la commande less(1)
(blog.thechases.com)- Grâce aux nombreuses fonctionnalités de la commande
lesset à ses combinaisons de raccourcis, il est possible d’explorer des fichiers, rechercher, filtrer, poser des signets et basculer des options efficacement - On peut ouvrir plusieurs fichiers à la fois et naviguer, ajouter ou supprimer des fichiers avec les commandes
:n,:p,:e,:d - Les fonctions de recherche (
/, ?, n, N) et de filtrage (&,&!) permettent de trouver rapidement un motif précis ou de l’exclure - Les signets (
m,') et la fonction d’appariement des parenthèses simplifient les déplacements dans de longs documents ou des fichiers de code - Les bascules d’options en cours d’exécution (
-S,-R,-N, etc.) et l’exécution de commandes externes (!) permettent d’ajuster immédiatement l’environnement sans quitterless
Gérer plusieurs fichiers
lessn’est pas seulement un outil à utiliser en fin de pipeline : il peut aussi ouvrir directement plusieurs fichiers passés en argument- Exemple :
less file1 file2 file3
- Exemple :
- Pendant l’exécution, on peut aussi ajouter un nouveau fichier avec la commande
:e file.h :npermet d’aller au fichier suivant,:pau fichier précédent, et:xou:rewindde revenir au premier fichier- La commande
:dpermet de retirer le fichier courant de la liste
Fonctions de navigation
- En saisissant un nombre +
G, comme3141G, on peut aller à un numéro de ligne précis - Avec un nombre +
%, comme75%, on peut sauter à une position en pourcentage dans le fichier /motiflance une recherche vers l’avant,?motifune recherche vers l’arrière, etn/Npermettent d’aller au résultat suivant/précédent!motifsert à trouver les lignes qui ne correspondent pas,*à rechercher à travers plusieurs fichiers,@à démarrer la recherche depuis le premier fichier, et@*à rechercher dans l’ensemble de tous les fichiers
Fonctions de filtrage
&motifn’affiche que les lignes correspondant au motif, avec un comportement proche degrepen interne&!motifn’affiche que les lignes ne correspondant pas au motif, ce qui est utile pour parcourir des fichiers de logs
Signets et appariement des parenthèses
m+ une lettre permet de définir un signet, et'+ une lettre de revenir à cette position- Exemple : utiliser
mopour la section OPTIONS etmepour la section EXAMPLES, puis naviguer avec'oet'e
- Exemple : utiliser
- Si une parenthèse comme
(,[,{se trouve sur la première ligne affichée, saisir cette parenthèse fait sauter vers la parenthèse correspondante- À l’inverse, si une parenthèse fermante se trouve sur la dernière ligne, on peut revenir à la parenthèse ouvrante
alt+ctrl+b, entre autres, permet de définir des paires de parenthèses personnalisées
Basculer des options et exécuter des commandes externes
- Pendant l’exécution, saisir
-suivi d’une option permet de modifier immédiatement la configuration-S: activer/désactiver le retour à la ligne-G: surlignage de recherche-i/-I: réglage de la sensibilité à la casse-R: affichage des couleurs ANSI-N/-n: afficher/masquer les numéros de ligne
- La commande
!permet d’exécuter une commande externe (!date,!bc, etc.)
Variables d’environnement et autres fonctions
- Les options fréquemment utilisées peuvent être stockées dans la variable d’environnement
$LESS- Exemple :
LESS="-RNe"→ affichage des couleurs, affichage des numéros de ligne, fermeture automatique en fin de fichier
- Exemple :
- La commande
vpermet d’ouvrir le fichier courant dans l’éditeur$VISUAL - Les commandes
oouOpermettent d’enregistrer dans un fichier le contenu lu depuis l’entrée standard lessprend aussi en charge une fonction de saut vers des tags basée surctags, mais elle est peu utilisée
1 commentaires
Commentaires sur Hacker News
Étonnant que la fonctionnalité
followait été oubliée. Au début, ça donne une UX un peu étrange, mais une fois habitué, c’est souvent plus pratique quetailLancé avec
less +F, cela suit en temps réel un flux d’entrée ou un fichier. Avec<C-c>, on arrête le suivi et on peut naviguer comme dans unlessnormal, puis appuyer de nouveau surF(majuscule) pour reprendre le suivikubectl logs | less +F), appuyer sur<C-c>termine tout le processus du pipe, ce qui empêche de reprendre le suivi avecF.lesspropose bien une alternative avec<C-x>pour arrêter le suivi, mais la plupart des shells interceptent cette touchetail, on peut appuyer sur Entrée pour ajouter une ligne vide sous la dernière ligne. Comme cela aide à distinguer les résultats de plusieurs exécutions, j’utilise encoretailrien que pour çaLes options
-Xou--no-initévitent d’effacer l’écran à la sortie. En général, je préfère garder l’écran affiché pour pouvoir relire ce qui précède ou faire du copier-coller-Xqu’occasionnellement, vous pouvez consulter l’astuce de ce fil-E, cela quitte immédiatement si la sortie est plus petite que la taille du terminal. J’utilise souvent la combinaison « less -SEXIER ». En plus, c’est facile à retenirQuand je débogue de longs logs, j’utilise
&pour filtrer uniquement ce que je veux lire, et&!pour exclure ce qui est inutile. Les expressions régulières sont aussi prises en charge. C’est parfois lent, mais pratique pour filtrer à la voléeDeux astuces utiles
L’option
-Lsaute le prétraitement du fichier d’entrée, ce qui évite qu’un fichier de log rotatif nommélogfile.1,logfile.2, etc. soit traité à tort comme dunroffDe plus, lors d’une recherche, si l’on saisit
Ctrl-Rcomme premier caractère, on peut rechercher une chaîne littérale plutôt qu’une regexOn peut configurer des raccourcis clavier avec le fichier
~/.lesskey. J’ai liésau défilement vers l’arrière, ce qui me permet de faire page précédente/page suivante rapidement à une main avecdetsLe
lesspar défaut de macOS n’a pas cette fonctionnalité, donc il faut l’installer via Homebrew (exemple de configuration, explication associée)Nà next-file. L’absence de lesskey sur macOS est vraiment pénibleLe
mand’OpenBSD transmet des tags àless, ce qui permet d’aller directement à une section précise avec:t test, par exemple. C’est une fonction intéressante, mais en pratique je ne l’utilise presque jamais.Une interface cohérente via une simple recherche avec
/est plus intuitive.À noter que les BSD utilisent le jeu de macros
mdocpour produire une documentation sémantique, et qu’OpenBSD utilise le programmemandocpour le rendu (documentation mdoc)Avec
^q, on peut quitterlesssans effacer l’écran, tandis queqgarde son comportement habituel et efface l’écran à la sortieIl faut lancer
lesssans-X, et c’est particulièrement utile avecgit log, quand on a besoin de consulter la sortie précédentelesspermet aussi de rediriger vers une commande externe.Par exemple, on peut poser un marqueur avec
ma, puis utiliser|apour envoyer à une commande externe le contenu entre la position actuelle et ce marqueur.C’est utile pour enregistrer une partie d’un article ou d’un e-mail.
On peut aussi ajuster avec l’option
-jle nombre de lignes entre le haut de l’écran et l’endroit où s’affiche un résultat de recherchegit log. Après avoir sélectionné un commit, je lancegit showavec un raccourci, ou j’effectue directement un fixup.J’utilise le debug trap de
bashetkeyd-application-mapperpour détecter la commande en cours d’exécution, extraire le hash du commit correspondant et le traiter avec un scriptLe moteur de regex de
less(1)est beaucoup trop lent. Sur de gros fichiers, je fais plutôt la recherche avecgrepouripgrep, puis j’envoie le résultat verslesspour le consulterLa touche
spermet d’enregistrer les données d’un pipe dans un fichier. C’est bien plus pratique que le copier-collerless, puis je ne sauvegarde avecsque si le résultat est utile.On peut aussi utiliser
tee, mais cela crée toujours un fichier, ce qui est inefficace quand on n’en a pas besoin