1 puntos por GN⁺ 2026-01-04 | 1 comentarios | Compartir por WhatsApp
  • Mediante las diversas funciones del comando less y combinaciones de atajos, se puede realizar de forma eficiente la navegación por archivos, la búsqueda, el filtrado, los marcadores y el cambio de opciones
  • Se pueden abrir varios archivos al mismo tiempo y moverse, agregar o eliminar archivos con los comandos :n, :p, :e, :d
  • Aprovechando las funciones de búsqueda (/, ?, n, N) y filtrado (&, &!), se pueden encontrar o excluir rápidamente patrones específicos
  • Con los marcadores (m, ') y la función de emparejamiento de paréntesis, se simplifica el desplazamiento dentro de documentos largos o archivos de código
  • Mediante el cambio de opciones en ejecución (-S, -R, -N, etc.) y la ejecución de comandos externos (!), es posible ajustar el entorno al instante sin salir de less

Manejo de varios archivos

  • less no es una herramienta que solo se use al final de un pipeline; también puede abrir varios archivos directamente como argumentos
    • Ejemplo: less file1 file2 file3
  • Incluso durante la ejecución, se puede agregar un archivo nuevo con el comando :e file.h
  • Con :n se puede ir al archivo siguiente, con :p al archivo anterior, y con :x o :rewind al primer archivo
  • Con el comando :d se puede eliminar el archivo actual de la lista

Funciones de navegación

  • Si escribes número + G, como 3141G, puedes ir a un número de línea específico
  • Con número + %, como 75%, puedes saltar a una posición porcentual dentro del archivo
  • Con /patrón haces una búsqueda hacia adelante, con ?patrón una búsqueda hacia atrás, y con n/N te mueves al resultado siguiente/anterior
    • !patrón sirve para buscar líneas que no coincidan, * para buscar a través de varios archivos, @ para iniciar la búsqueda desde el primer archivo, y @* para buscar en todos los archivos completos

Funciones de filtrado

  • Con &patrón se muestran solo las líneas que coincidan con ese patrón, funcionando como un grep interno
  • Con &!patrón se muestran solo las líneas que no coincidan con el patrón, lo que resulta útil al revisar archivos de registro

Marcadores y emparejamiento de paréntesis

  • m + una letra para establecer un marcador, y ' + una letra para ir a esa ubicación
    • Ejemplo: usar mo para la sección OPTIONS y me para la sección EXAMPLES, y luego moverse con 'o, 'e
  • Si un paréntesis como (, [, { aparece en la primera línea de la pantalla, al introducir ese mismo paréntesis se salta a su pareja correspondiente
    • A la inversa, si un paréntesis de cierre está en la última línea, se mueve al paréntesis de apertura
  • También es posible definir pares de paréntesis personalizados con alt+ctrl+b, etc.

Cambio de opciones y ejecución de comandos externos

  • Durante la ejecución, al introducir opciones después de -, se puede cambiar la configuración de inmediato
    • -S: alternar ajuste de línea
    • -G: resaltar búsqueda
    • -i/-I: configuración de distinción entre mayúsculas y minúsculas
    • -R: mostrar colores ANSI
    • -N/-n: mostrar/ocultar números de línea
  • Con el comando ! se pueden ejecutar comandos externos (!date, !bc, etc.)

Variables de entorno y otras funciones

  • Las opciones de uso frecuente se pueden guardar en la variable de entorno $LESS
    • Ejemplo: LESS="-RNe" → mostrar colores, mostrar números de línea y salir automáticamente al llegar al final del archivo
  • Con el comando v se puede abrir el archivo actual en el editor $VISUAL
  • Con o u O se puede guardar en un archivo el contenido leído desde la entrada estándar
  • less admite una función de salto de etiquetas basada en ctags, aunque se usa con poca frecuencia

1 comentarios

 
GN⁺ 2026-01-04
Comentarios en Hacker News
  • Sorprende que se hayan olvidado de la función follow. Al principio se siente como una UX rara, pero una vez que te acostumbras, muchas veces es mejor que tail
    Si lo ejecutas con less +F, sigue y muestra en tiempo real un flujo de entrada o un archivo. Con <C-c> dejas de seguirlo y puedes navegar como en less normal; luego, si presionas F otra vez (mayúscula), reanuda el seguimiento

    • Al seguir una entrada por pipe (kubectl logs | less +F), si presionas <C-c>, termina todo el proceso del pipe y ya no puedes reanudar el seguimiento con F. En less existe la alternativa de detener el seguimiento con <C-x>, pero la mayoría de los shells interceptan esa tecla
    • En tail, puedes presionar Enter para agregar una línea en blanco debajo de la última línea. Como sirve para distinguir resultados de varias ejecuciones, sigo usando tail por esa sola función
    • Más que decir que es “un poco raro”, creo que la UX es mala. No debería hacer falta exigir un cambio de modo; estaría bien que se actualizara automáticamente cuando llegue información nueva
    • Estaría bueno tener un modo en el que la salida nueva se agregue automáticamente y al mismo tiempo se pueda navegar. Algo como un simple toggle de auto-scroll, como en una terminal, sería suficiente
    • Antes pensaba que “follow” era una función compleja que manejaba descriptores de archivo de forma especial, pero en realidad solo hace polling continuo después de EOF. O sea, no hay una diferencia esencial entre abrir un archivo normalmente y el modo de seguimiento, y el software podría cambiar entre ambos fácilmente
  • La opción -X o --no-init evita que se limpie la pantalla al salir. Yo normalmente prefiero mantener la pantalla para poder revisar contenido anterior o copiar y pegar

    • Si solo quieres usar el comportamiento de -X de vez en cuando, puedes revisar el tip de este hilo
    • Si la usas junto con -E, sale de inmediato cuando la salida es más pequeña que el tamaño de la terminal. Suelo usar seguido “less -SEXIER” al combinar varias opciones. Además, es fácil de recordar
  • Al depurar logs largos, uso & para filtrar solo las partes que quiero leer y &! para excluir lo innecesario. También soporta expresiones regulares. A veces puede ser lento, pero sirve mucho para filtrar al vuelo

  • Hay dos tips útiles
    La opción -L omite el preprocesamiento del archivo de entrada, evitando que nombres de logs rotados como logfile.1, logfile.2 se procesen erróneamente con nroff
    Además, al buscar, si introduces Ctrl-R como primer carácter, puedes buscar como cadena literal y no como expresión regular

  • Puedes configurar atajos con el archivo ~/.lesskey. Yo vinculé s para hacer scroll hacia atrás, así que con d y s puedo hacer page up/down rápido con una sola mano
    El less por defecto de macOS no trae esta función, así que hay que instalarlo con Homebrew (configuración de ejemplo, explicación relacionada)

    • Yo también vinculo N a next-file. Que macOS no tenga lesskey es realmente incómodo
  • El man de OpenBSD le pasa etiquetas a less, así que puedes ir directo a una sección específica con algo como :t test. Es una función interesante, pero en la práctica casi nunca la uso.
    La interfaz consistente de simplemente buscar con / me parece más intuitiva.
    Como referencia, los BSD usan el conjunto de macros mdoc para crear documentación semántica, y OpenBSD usa el programa mandoc para renderizarla (documentación de mdoc)

  • Puedes configurar ^q para salir de less sin limpiar la pantalla, mientras que q normal sigue saliendo y limpiando la pantalla como siempre

    echo '^q toggle-option -redraw-screen\nq' >> ~/.config/lesskey
    

    Debes ejecutar less sin -X, y resulta especialmente útil cuando necesitas consultar la salida anterior, como con git log

  • less también tiene una función para hacer pipe a comandos externos.
    Por ejemplo, puedes poner una marca con ma y con |a enviar a un comando externo el contenido desde la posición actual hasta esa marca.
    Sirve para guardar partes de noticias o correos electrónicos.
    Además, con la opción -j puedes ajustar cuántas líneas debajo de la parte superior de la pantalla se muestra un resultado de búsqueda

    • Yo también uso esta función de pipe con git log. Después de elegir un commit, ejecuto git show con un atajo, o incluso hago tareas de fixup directamente.
      Uso el debug trap de bash y keyd-application-mapper para detectar el comando en ejecución en ese momento, extraer el hash del commit y procesarlo con un script
  • El motor de expresiones regulares de less(1) es demasiado lento. Cuando trabajo con archivos grandes, busco con grep o ripgrep y luego paso ese resultado a less para verlo

  • Con la tecla s puedes guardar los datos de un pipe en un archivo. Es mucho más cómodo que copiar y pegar

    • Yo también uso mucho esa función. Veo la salida de un proceso largo con less, y solo si el resultado me sirve, lo guardo con s.
      También podría usar tee, pero eso siempre deja un archivo, así que cuando no hace falta resulta ineficiente