Kabosu - Creando cosas
Publicado: 2024-09-05
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.
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.
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.
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.
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.
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:
nnn
para que no mueva el directorio actual de la terminal al cerrarse.n
para que sí que actualice el directorio actual.Uso uno u otro dependiendo de lo que esté haciendo en cada momento.