Kabosu - Creando cosas

Logo de la página. Gato esférico con colores verdoso.

Configuración y manejo del gestor de ficheros nnn

Publicado: 2024-09-05

Etiquetas: Linux, Software


Desde hace unos meses estoy usando el gestor de ficheros nnn. Es un gestor minimalista para la terminal que funciona tanto en Linux como en Mac. En su vista por defecto, que es la que yo uso, se ve prácticamente como si hubieras ejecutado el comando ls aunque se pueden añadir extensiones para hacerlo más bonito. Puedes mirar capturas de pantalla en el enlace anterior.

Interfaz

Esta es la interfaz básica cuando lo abro en mi directorio home:

1 2 3 4 ~

archive/
bin/
content/
Desktop/
Documents/
Downloads/
fotos/
inbox/
Music/
Pictures/
proj/
Public/
snap/
Templates/
Videos/
VirtualBox VMs/

1/16 2024-08-14 14:02 drwxrwxr-x 4K

Arriba tenemos una especie de pestañas. Pulsando las teclas 1, 2, 3, 4 podemos ver hasta 4 directorios. Útil para mover o copiar archivos entre ellos. El ~ indica la ruta actual.

En medio están los ficheros del directorio actual. Puedes moverte por la lista con las flechas arriba y abajo.

En la parte de abajo hay una fila que indica algo de información sobre el fichero que está en el cursor.

Atajos de teclado básicos

Estos son los botones que yo más uso:

Lo que más me gusta de nnn es que me permite moverme por los directorios muy rápidamente con las flechas.

Renombrar ficheros (r)

Al pulsar la tecla r abre un fichero de texto con el editor que tengamos por defecto (en mi caso NeoVim). En ese fichero aparecerá un listado de todos el contenido del directorio. Podemos editar cada una de las líneas para cambiar el nombre del fichero o directorio correspondiente.

Me gusta mucho esta implementación porque permite renombrar muchos ficheros a la vez. Por ejemplo si quiero cambiar todos los espacios de los nombres de fichero por _ simplemente tengo que hacer una sustitución global de uno por otro. Al cerrar el editor se renombrará todo lo que haya cambiado.

Hay que andarse con ojo de no eliminar o reordenar las filas porque podemos hacer un estropicio en el directorio.

Seleccionar ficheros (espacio) y moverlos (v)

Pulsando espacio se selecciona un fichero. Le aparece el símbolo + delante del nombre.

Una vez tenemos seleccionado el fichero o ficheros que queramos podemos movernos a otro directorio y allí apretar v para moverlos.

Un detalle que me gusta es que se pueden elegir ficheros de varios directorios y luego al pulsar v moverá todos al directorio en el que estamos.

Con los ficheros seleccionados también podemos pulsar x para borrarlos o r para renombrarlos aunque no lo he usado mucho.

Cambiar de directorio al salir

Como ya he dicho arriba, moverme por la estructura de directorios con la teclas me gusta mucho. El problema es que, por la forma en la que funcionan los procesos en Unix, aunque hayamos cambiado de directorio en un proceso hijo (nnn) el padre (la terminal) sigue estando en el directorio en el que estuviera antes.

Hay un pequeño truco para solucionarlo: se puede configurar nnn para que escriba un fichero temporal con el último directorio en el que estaba al cerrarse y hacer que el shell se mueva a él automáticamente.

Es algo opcional pero si lo quieres activar, en el repositorio de nnn hay scripts que podemos usar dependiendo del shell que tengamos. Yo uso Bash así que he copiado el contenido de quitcd.bash_sh_zsh a mi fichero .bashrc. Su contenido es el siguiente:

n ()
{
    # Block nesting of nnn in subshells
    [ "${NNNLVL:-0}" -eq 0 ] || {
        echo "nnn is already running"
        return
    }

    # The behaviour is set to cd on quit (nnn checks if NNN_TMPFILE is set)
    # If NNN_TMPFILE is set to a custom path, it must be exported for nnn to
    # see. To cd on quit only on ^G, remove the "export" and make sure not to
    # use a custom path, i.e. set NNN_TMPFILE *exactly* as follows:
    #      NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd"
    export NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd"

    # Unmask ^Q (, ^V etc.) (if required, see `stty -a`) to Quit nnn
    # stty start undef
    # stty stop undef
    # stty lwrap undef
    # stty lnext undef

    # The command builtin allows one to alias nnn to n, if desired, without
    # making an infinitely recursive alias
    command nnn "$@"

    [ ! -f "$NNN_TMPFILE" ] || {
        . "$NNN_TMPFILE"
        rm -f -- "$NNN_TMPFILE" > /dev/null
    }
}

Define una función n que configura nnn para que guarde el último directorio en .lastd, ejecute nnn y cuando se termine el proceso lee el contenido de .lastd. Hay por tanto dos formas de ejecutar de nnn:

Uso uno u otro dependiendo de lo que esté haciendo en cada momento.


Artículo siguiente: Cómo descargar una web entera con Wget
Artículo anterior: Cómo convertir un vídeo de webm a mp4 con FFMPEG