Traducción al Español que hice sobre la Wiki publicada en el repositorio del navegador.
nnn (n3) un completo gestor de archivos de terminal. Es diminuto, casi 0-configurado e increíblemente rápido. Está diseñado para ser discreto con flujos de trabajo inteligentes para adaptarse a los trenes de pensamiento.
nnn puede analizar el uso del disco, renombrar por lotes, lanzar aplicaciones y seleccionar archivos. El repositorio de plugins tiene toneladas de plugins para ampliar las capacidades aún más, por ejemplo, Previsualización en directo (vista previa), (des)montar discos, buscar y listar, archivo/dir diff, subir archivos. Un marco de parches aloja un número considerable de parches enviados por los usuarios, que son de naturaleza subjetiva.
Plugins (neo)vim independientes - nnn.vim, vim-floaterm nnn wrapper y nnn.nvim (neovim exclusive).
Se ejecuta en el Pi, Termux (Android), Linux, macOS, BSD, Haiku, Cygwin, WSL, a través de DEs o un entorno estrictamente CLI.
¡No memorice!. Flechas, /, q son suficientes. Tab: crea y/o cicla contextos. ?: lista los atajos.
Una biblioteca curses con soporte de caracteres anchos (por ejemplo, ncursesw), libc y libreadline (opcional).
Utilidad que depende de | ¿Instalar? | Operación |
---|---|---|
xdg-open (Linux)/open(1) (macOS)/cygstart (Cygwin)/open (Haiku) | base | Apertura por defecto |
file, coreutils (cp, mv, rm), xargs, sed | base | tipo de archivo, copiar, (re)mover |
GNU sed (non-Linux) | requerido | copiar, (re)mover |
tar, (un)zip [bsdtar/atool/(un)rar for more formats] | base | administrador archivo |
archivemount, fusermount(3)/umount (macOS) | opcional | (des)montar archivos |
sshfs/rclone, fusermount(3)/umount (macOS) | opcional | (des)montar unidades remotas |
gio trash/trash-cli | opcional | papelera [por defecto: rm -rf] |
vlock (Linux)/bashlock (macOS)/lock(1) (BSD)/peaclock (Haiku) | opcional | bloqueo de terminal |
advcpmv (Linux) (integración) | opcional | copiar, mover, indicador de progreso |
$VISUAL/$EDITOR, $PAGER, $SHELL | opcional | alternativa a: vi, less, sh |
¿No puede instalar los paquetes? Obtenga el binario enlazado estáticamente de la última versión.
Distribución RPM mantenida oficialmente + un paquete Arch está disponible en Openbuildservice.
Los paquetes para Debian y Ubuntu y un binario estático se generan con la última versión.
Aquí se puede consultar la versión de nnn según el gestor de paquetes correspondiente a cada Distribución.
Descargue la última versión o clone este repositorio (arriesgado), instale las dependencias y compile. En Ubuntu 18.04:
sudo apt-get install pkg-config libncursesw5-dev libreadline-dev sudo make strip install
Se admite PREFIX, en caso de que desee instalar en una ubicación diferente.
Consulte las guías del desarrollador para la verificación del código fuente, notas específicas de la plataforma y otros consejos.
Existen scripts de finalización para Bash, Fish y Zsh. Consulte el manual de su shell para instalarlos.
Visite la página de complementos.
No hay archivo de configuración. Los archivos asociados se encuentran en
${XDG_CONFIG_HOME:-$HOME/.config}/nnn/
Use el plugin nbak para hacer una copia de seguridad de la configuración.
nnn admite algunas variables de entorno opcionales (que puede configurar si lo necesita).
Ejemplo export | Descripción |
---|---|
NNN_OPTS="cEnrx" | opciones binarias a nnn |
NNN_OPENER="/path/to/custom/opener" | abridor personalizado (vea plugin nuke) |
NNN_BMS="d:$HOME/Documents;D:$HOME/Docs archive/" 1 | pares clave-marca |
NNN_PLUG='o:fzopen;m:nmount;x:!chmod +x $nnn'1 | pares clave-plugin (o cmd) |
NNN_ORDER='t:/home/user/Downloads;S:/usr/bin' 2 | pedidos a directorios específicos |
NNN_ARCHIVE="\\.(7z|bz2|gz|tar|tgz|zip)$" 3 | archivos: [por defecto: bzip2, (g)zip, tar] |
NNN_ARCHMNT='fuse-archive' | montador de archivos [por defecto: archivemount] |
NNN_COLORS='1234' (/'#0a1b2c3d'/'#0a1b2c3d;1234') 4 6 | colores de contexto: [por defecto: '4444' (blue)] |
NNN_FCOLORS='c1e2272e006033f7c6d6abc4' 5 | colores específicos de cada archivo |
NNN_SSHFS='sshfs -o reconnect,idmap=user' 6 | SSHFS cmd personalizado |
NNN_TRASH=n (n=1: trash-cli, n=2: gio trash) | usar la papelera del escritorio [por defecto: delete] |
NNN_SEL='/tmp/.sel' | archivo de selección personalizada |
NNN_FIFO='/tmp/nnn.fifo' 7 | FIFO en el que escribir la ruta del archivo sobrevolado |
NNN_LOCKER='saidar -c' | espacio de terminales |
NNN_TMPFILE='/tmp/.lastd' | siempre cd al salir |
NNN_HELP='pwy paris' | cuando se corre cmd, mostrar o/p en la página de ayuda |
NNN_MCLICK='^R' (/'m') 8 | tecla que emula el botón del medio del ratón |
NO_COLOR=1 9 | desactivar salida de color ANSI |
export NNN_ARCHIVE="\\.(7z|a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|rar|rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)$"
Orden | Hex | Color |
---|---|---|
Dispositivo de bloque | c1 | Verde marino oscuro 1 |
Dispositivo de caracter | e2 | Amarillo 1 |
Directorio | 27 | Azul cielo profundo 1 |
Ejecutable | 2e | Verde 1 |
Regular | 00 | Normal |
Enlace duro | 60 | Ciruela 4 |
Enlace simbólico | 33 | Cyan 1 |
No presente OR (o) detalles de archivo | f7 | Gris 62 |
Enlace simbólico huérfano | c6 | Rosa profundo 1 |
FIFO | d6 | Naranja 1 |
Socket | ab | Orquídea media 1 |
Desconocido O archivo regular/ejecutable | c4 | Rojo 1 |
uso: nnn [opciones] [ruta] El poco ortodoxo gestor de archivos del terminal. posición de los argumentos: RUTA directorio_de_inicio/archivo [por defecto: .] argumentos opcionales: -a auto NNN_FIFO -A no entrar automáticamente al directorio durante el filtro -b abrir clave de marcador (prevalece sobre -s/S) -B usar bsdtar para archivos -c un clic NNN_OPENER (prevalece sobre -e) -C esquema de 8 colores -d modo detalle -D directorios en color de contexto -e texto en $VISUAL/$EDITOR/vi -E ediciones internas en EDITOR -f use readline para el archivo histórico -F valor modo FIFO [0:vista previa 1:explorar] -g filtros de expresiones regulares -H mostrar archivos ocultos -i mostrar información del archivo actual -J no avanzar automáticamente al seleccionar -K detectar colisión de teclas -l valor para establecer cantidad líneas de desplazamiento -n modo escribir para navegar -o abrir archivos sólo con Enter -p archivo, selección archivo [-:stdout] -P clave, ejecutar clave plugin -Q no pedir confirmación para salir -r usar advcpmv (cp, mv parcheado) -R sin rollover en los bordes -s nombre, cargar sesión por nombre -S sesión persistente -t segundos tiempo de espera para bloquear -T orden de clasificación por clave [a/d/e/r/s/t/v] -u usar selección (no prompt) -u usar selección (no prompt) -U mostrar usuario y grupo -V mostrar versión -x notis, selecciona sync, título de xterm -h mostrar ayuda
Nota
NAVEGACIÓN Up k Arriba PgUp ^U Página arriba Dn j Abajo PgDn ^D Página abajo Lt h Padre ~ ` @ - ~, /, unicio, previo Ret Rt l Abrir ' Primer archivo/partida g ^A Arriba J Saltar a entrada/desplazamiento G ^E Fin ^J Alternar avance automático al abrir B (,) Reservar(marcar) b ^/ Seleccionar marcador 1-4 Contexto (Sh)Tab Ciclo/nuevo contexto 2Esc ^Q Salir q Salir de contexto ^G SalirCD Q Elegir/err, salir FILTER & PROMPT / Filtro ^N Cambiar tipo a navegación Esc Salir del prompt ^L Cambiar último filtro . Alternar oculto Alt+Esc Desfiltrar, salir de contexto ARCHIVOS o ^O Abrir con... n Crear nuevo/vincular f ^F Detalles del archivo d Conmutación del modo detallado ^R Renombrar/copiar r Renombrar por lotes z Archivar e Editar archivo * Alternar exe > Exportar lista Espacio + (Des)seleccionar m-m Seleccionar rango/borrar a Seleccionar todo A Invertir sel p ^P Copiar aquí w ^W Cp/mv sel as v ^V Mover aquí E Editar lista sel x ^X Borrar S Lista sel tamaño Esc Enviar a FIFO MISC Alt ; Seleccionar plugin = Lanzar aplicación ¡! ^] Shell ] Cmd prompt c Conectar remoto u Desmontar remoto/archivo t ^T Ordenar conmutadores s Gestionar sesión T Establecer tipo de tiempo 0 Bloquear ^L Redibujar ? Ayuda, conf
Nota
Aquí hay una versión del mapa de teclado en formato SVG.
Clic | Función |
---|---|
Un clic con . | Visita el contexto. |
Un clic con en la ruta actual. | Visita directorio padre. |
Uno o doble clic con en las dos últimas filas. | Conmuta tipo de navegación. |
Un clic con . | Selecciona contexto o entrada. |
Doble clic con . | Selecciona contexto o abre entrada. |
Un clic con . | Añade entrada a la selección. |
Un clic con . | User configured with NNN_MCLICK |
Algunas combinaciones de teclas de control pueden no funcionar si están asignadas por stty. Para confirmarlo, ejecute stty -a y busque conflictos de combinación de teclas. Algunas de las más comunes son: ^Q start, ^S (stop), ^V (lnext).
Para eliminar la asignación de stty:
stty start undef stty stop undef stty lnext undef
Listado 1 | Listado 2 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Nota
Todos los enlaces (hard/sym, duros y blandos) están atenuados.
Símboo | Significado |
---|---|
x/y | Número/s de archivo/s actuales/total |
+/*(n) | Modo de selección activado/selección de rango activada (recuento seleccionado con buffer) [invertido]. |
H | Se enumeran los archivos ocultos. |
M | Tiempo de modificación ordenado. |
A | Tiempo de acceso ordenado. |
C | Cambio de hora ordenado. |
S | Tamaño ordenado |
E | Extensión de archivo ordenada. |
V | Versioń ordenada. |
R | Clasificación inversa. |
du | Uso de disco. |
au | Uso aparente de disco. |
-> | Destino del enlace simbólico. |
n-n | Número de enlaces duros - Número de inodo. |
La unidad mínima de tamaño de archivo es el byte (B). El resto son K, M, G, T, P, E, Z, Y (potencias de 1024), igual que las unidades por defecto en ls.
nnn -h man nnn
Para buscar atajos de teclado en tiempo de ejecución, pulse ?.
usuario1: ¿Cómo se compara con Midnight Commander?. usuario2: También funciona a la luz del día. - de una conversación en reddit
Previsualización en directo (vista previa) de un directorio de proyecto como ejemplo.
Abrir varias ubicaciones con 4 contextos. El estado se muestra en la esquina superior izquierda:
Crea y cicla contextos usando Tab o Mayús+Tab. Un nuevo contexto copia el estado del contexto anterior.
Use colores específicos para cada contexto (consulte la configuración NNN_COLORS) para identificarlos fácilmente.
nnn puede trabajar con múltiples contextos usando Tab o Shift+Tab.
Otras soluciones:
Por ejemplo, para abrir 2 instancias en dvtm, ejecute: dvtm n n.
También puede tener un alias: alias 2="dvtm n n".
o una función Bash (con Ctrl-\ (^\) como modificador dvtm) para manejar los argumentos:
2 () { dvtm -m '^\' "nnn -nr $@" "nnn -nr $@" }
Las sesiones son una forma de guardar y restaurar estados de trabajo. Una sesión almacena los ajustes y contextos. Las sesiones pueden cargarse en tiempo de ejecución o con una opción del programa.
Importante
Todos los archivos de sesión se encuentran por nombre de sesión en el directorio:
${XDG_CONFIG_HOME:-$HOME/.config}/nnn/sessions
"@" es el archivo de "auto sesión".
Los filtros son cadenas (o patrones regex) para encontrar instantáneamente entradas coincidentes en el directorio actual (búsqueda por tipo). Por defecto, las coincidencias no distinguen entre mayúsculas y minúsculas. El último filtro de cada contexto se mantiene en tiempo de ejecución o en las sesiones guardadas.
Cuando hay una coincidencia única y se trata de un directorio, nnn entra automáticamente en el directorio. La opción -A del programa desactiva esta opción.
Tecla | Función |
---|---|
^char | Funciones habituales de combinación de teclas. |
Esc | Salir del filtro pero omitir la actualización del directorio |
Alt+Esc | Quitar el filtro, salir del contexto. |
Teclas especiales en el indicador de filtro vacío:
Tecla | Función |
---|---|
? | Mostrar ayuda y pantalla de configuración |
/ | Alternar entre cadena y expresión regular. |
: | Alternar entre mayúsculas y minúsculas. |
^L | Borrar filtro (si no está vacío) O aplicar el último filtro |
Bkspc | Permanecer en el filtro y actualizar directorio. |
Del | Permanecer en el filtro y actualizar directorio. |
Use expresión regular (regex) para el filtrado sensible a mayúsculas y minúsculas con caracteres anchos, ya que la función strcasestr (utilizada para filtros de cadena) no funciona con locales multibyte (ref1, ref2).
En este modo, los directorios se abren en modo filtro, lo que permite una navegación continua.
Para iniciar en modo escribir para navegar (type-to-nav), utilice la opción del programa -n o pulse ^N.
Teclas especiales adicionales en el indicador de filtro vacío en modo escribir para navegar:
Listado 1 | Listado 2 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
nnn permite seleccionar archivos en distintos directorios y contextos.
Hay 3 grupos de combinaciones de teclas (ver Teclado, Ratón) para añadir archivos a la selección:
Una selección se puede editar, copiar, mover, eliminar, archivar o enlazar. Ejemplo de flujo de trabajo para copiar o mover algunos archivos:
Las rutas absolutas de los archivos seleccionados se copian en el archivo .selection del directorio config. El archivo de selección se comparte entre varias instancias del programa. Las selecciones de varias instancias no se fusionan. La última instancia que escribe en el archivo sobrescribe el contenido anterior. Si tiene 2 instancias de nnn abiertas en 2 paneles de un multiplexor de terminal, puede seleccionar en un panel y utilizar la selección en el otro panel. La selección se borra en la instancia de nnn donde se hizo la selección en mv/rm (pero no en cp).
nnn borra la selección después de una operación exitosa con la selección. Los plugins pueden definir el comportamiento individualmente.
Para editar la selección use la tecla editar selección. La edición no finaliza el modo de selección. Puede añadir más archivos a la selección y volver a editar la lista. Si no hay ningún fichero seleccionado en la sesión actual, esta opción intenta listar el fichero de selección.
Use la opción -x del programa para copiar la selección en el portapapeles del sistema. Debe tener instalados los plugins.
Muchos plugins utilizan este método. Las rutas de los archivos están terminadas en NUL, por lo que se requiere un procesamiento adicional para hacerlas utilizables.
Para ejecutar ls -l en las rutas de archivos de la selección:
xargs -0 ls -l < "${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection"
Una variable especial puede ser útil:
export sel=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection
Para que pueda manejar fácilmente archivos juntos (¡incluso en el símbolo del sistema nnn!):
xargs -0 ls -l < $sel
Hay dos formas de buscar y listar:
Las rutas de los archivos deben estar separadas por NUL ('\0'). Las rutas pueden ser relativas al directorio actual o absolutas. Las rutas no válidas en la entrada se ignoran. El límite de procesamiento de entrada es de 16.384 rutas o 64 MiB (max_rutas * max_len_rutas) de datos.
Para listar el flujo de entrada, inicie nnn escribiendo en su entrada estándar. Por ejemplo, para listar archivos en el directorio actual mayores de 1M:
find -maxdepth 1 -size +1M -print0 | nnn # fd -d 2 -S +1M -0 | nnn
o redirigir una lista desde un archivo:
nnn < files.txt
Práctica función del shell bash/zsh para listar archivos por tipo mime en el directorio actual:
1
2
3
4
5
6
# para mostrar los archivos de vídeo, ejecute: list video
list ()
{
find . -maxdepth 1 | file -if- | grep "$1" | awk -F: '{printf "%s\0", $1}' | nnn
# fd -d 1 | file -if- | grep "$1" | awk -F: '{printf "%s\0", $1}' | nnn
}
Se creará un directorio temporal que contendrá enlaces simbólicos a las rutas dadas. Cualquier acción realizada sobre estos enlaces simbólicos se realizará sólo sobre sus destinos, después de lo cual podrían dejar de ser válidos.
Pulse la tecla derecha (→) o l sobre un enlace simbólico dentro del directorio de listado para acceder al archivo de destino. Pulse - para volver al directorio de listado. Pulse Intro para abrir el enlace simbólico.
El flujo de entrada del listado se puede programar. Puede ampliarse para seleccionar (opción -p) entradas de los resultados del listado.
Los indicadores (excepto el indicador de filtro) admiten atajos de línea de comandos similares a los de la línea de lectura. Intro o ^D en el indicador vacío (excepto el indicador de filtro) sale del indicador.
La tecla Ctrl-L (^L) borra y Esc sale de todos los avisos.
La práctica línea de comandos REPL (se muestra en ]) entiende las variables de entorno (como $PWD). Consulte la documentación de su shell (por ejemplo, BASH_ENV para bash, ~/.zshenv para zsh) para usar alias y funciones. Para seleccionar comandos del historial de tu shell en el símbolo del sistema y emitirlos después de editarlos (como fc), copia el plugin fzhist (¿como h quizás?) en su $PATH.
El símbolo del sistema nativo sólo recuerda el último comando ejecutado en la sesión actual. Para acceder y utilizar el historial del intérprete de comandos añada una función del intérprete de comandos similar a:
1
2
3
4
h ()
{
fzf <~/shell-specific_history_file | tr -d '\n' | xsel -bi
}
Pegue el comando seleccionado en el prompt utilizando Ctrl-Shift-V, opcionalmente edite y ejecute.
Todas las preguntas binarias se confirman con y o Y.
Se puede acceder a las siguientes variables especiales desde el símbolo del sistema o desde un intérprete de comandos generado:
Variable | Substitución |
---|---|
$nnn | Nombre de archivo en el contexto actual cuando se pasa el puntero del ratón. |
$dN | Ruta abierta en contexto N [N=1/2/3/4]. |
$fN | La ruta del archivo aparece en el contexto. |
Por ejemplo, para copiar el archivo sobre el que se pasa el cursor en el contexto 1 al directorio abierto en el contexto 3, ejecute cp "$f1" "$d3".
Se puede acceder a la selección desde el símbolo del sistema nativo:
Variable | Substitución |
---|---|
%j | Repetir cmd con todos los %j sustituidos por cada ruta de archivo seleccionada |
%J | Ejecutar el comando una sola vez con %J como últimos caracteres sustituidos por todas las rutas de archivo seleccionadas |
Ejemplo: buscar una cadena en cada fichero de la selección:
printf "Buscar cadena en %s\n" "%j"; grep "string" "%j"
Archivar todos los ficheros de la selección:
tar uvf archive.tar %J
Importante
El prompt (no readline nnn-internal one) puede recordar el último comando ejecutado. A veces puede ser deseable copiar un comando del historial del shell al prompt. Se pueden configurar combinaciones de teclas para copiar un comando desde el prompt bash/zsh al portapapeles del sistema. Puede usarlos en el prompt del subshell y pegar el comando en el prompt con Ctrl-Shift-V.
1
2
3
4
5
6
7
8
9
# bash: Copiar las líneas siguietnes en ~/.bashrc
# Copiar la línea actual al portapapeles con ^]
if [[ -n $DISPLAY ]]; then
copy_line_to_x_clipboard () {
printf %s "$READLINE_LINE" | xsel -ib
}
bind -x '"\C-]": copy_line_to_x_clipboard'
fi
1
2
3
4
5
6
7
8
9
10
11
# zsh: Copiar las líneas siguientes en ~/.zshrc
# Copiar la línea actual al portapapeles con ^U
if [[ -n $DISPLAY ]]; then
x-kill-whole-line () {
zle kill-whole-line
print -rn -- "$CUTBUFFER" | xsel -ib
}
zle -N x-kill-whole-line
bindkey '\C-u' x-kill-whole-line
fi
nnn (el núcleo de la utilidad C) es, en términos generales, de características restringidas. Incluye características que realmente necesita para que pueda seguir siendo lo suficientemente ligero como para terminar su flujo de trabajo con precisión antes de que su tren de pensamiento se pierda.
nnn admite plugins para ampliar sus capacidades.
He aquí una lista de los principios de diseño que rigen el núcleo del programa nnn:
nnn se despliega al usarlo. Algunas cosas que puede hacer:
Hay 2 formas (que pueden usarse juntas) de gestionar los marcadores.
Establece la variable de entorno NNN_BMS como una cadena de pares clave_carácter:ubicación separados por punto y coma (;):
export NNN_BMS="d:$HOME/Documentos;u:/home/usuario/Cam Uploads;D:$HOME/Descargas/"
Los marcadores se enumeran en la pantalla de ayuda y configuración (tecla ?).
La tecla de selección de marcadores b enumera todas las teclas de marcadores configuradas en NNN_BMS en el indicador de marcadores.
Se puede crear un marcador con un enlace simbólico al directorio actual con la tecla B (o manualmente en ~/.config/nnn/bookmarks).
Al pulsar Enter en el indicador de marcadores, se accede a este directorio. Si NNN_BMS no está configurado, la tecla select bookmark (seleccionar marcador) lo abre directamente.
Pulse - para volver al directorio original justo después de introducir un marcador con enlace simbólico.
Para saltar adelante y atrás a un directorio específico durante una sesión, puede marcar el directorio (tecla ,). Visítelo en cualquier momento utilizando la tecla Marcador seguida de ,. Si un directorio está marcado, la tecla Marcador también muestra ,.
Elija el archivo apropiado para su shell de misc/quitcd y añade el contenido al archivo rc de su shell. Tendrá que crear un nuevo intérprete de órdenes para que el cambio surta efecto. Deberá iniciar nnn como n (o su nombre de función/alias preferido).
Por defecto, cuando se pulsa ^G, nnn escribe el último directorio de trabajo en
${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd
Para usar cd on quit siempre, exporte la variable de entorno NNN_TMPFILE a su ruta de archivo preferida.
La tecla extra ^G para cd on quit es para evitar escribir en un fichero cada vez que nnn sale y permite cd on quit bajo demanda.
Para configurar nnn para cd al $PWD del subshell bash salido, agregue lo siguiente en .bashrc:
1
2
3
4
5
6
7
8
nnn_cd()
{
if ! [ -z "$NNN_PIPE" ]; then
printf "%s\0" "0c${PWD}" > "${NNN_PIPE}" !&
fi
}
trap nnn_cd EXIT
Añada un plugin con el siguiente contenido:
1
2
3
4
5
6
# !/usr/bin/env bash
# Descripción: Inicia una shell bash interactiva.
export nnn="$1"
bash -i
También puede usar el método de ejecutar cmd como plugin:
s:!bash -i*
El estado de montaje de los dispositivos de almacenamiento externo se puede cambiar en un REPL utilizando el plugin nmount.
Para auto-montar unidades de almacenamiento externo use reglas udev o envoltorios udisks.
Además de Live Previews, hay un plugin independiente imgview para explorar imágenes/ miniaturas de archivos de imagen, vídeo o audio en el terminal. Entre otras utilidades de visualización, soporta sxiv (abre su propia ventana) que es particularmente útil para navegar por las imágenes en un directorio, establecer el fondo de pantalla o copiar la ruta de la imagen al portapapeles (instrucciones).
Mientras que el usuario puede previsualizar la imagen sobre la que pasa el ratón en vista previa (preview-tabbed) y cambiarle el nombre, el siguiente procedimiento es un enfoque alternativo. Requiere el plugin imgview (con sxiv) y dmenu (zenity puede reemplazar a dmenu).
Guarde sxiv key-handler ~/.config/sxiv/exec/key-handler con el siguiente contenido:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env sh
# ^X-^R: pide el nombre de la nueva imagen (necesita `dmenu`) y `mv`
# ^X-^C: copiar la ruta de la imagen al portapapeles X (necesita `xclip`).
# Ejemplo de prompt de zenity:
# name="$(zenity --entry --display=:0.0 --text "rename $file to")" 2> /dev/null
while read -r file
do
case "$1" in
"C-r")
name="$(dmenu -p "rename $file to: ")" 2> /dev/null
if [ -n "$name" ]; then
mv "$file" "$name"
fi
;;
"C-c")
printf "%s" "$file" | xclip -selection clipboard ;;
*)
printf "Sorry, I don't understand"
exit 1
;;
esac
done
Ahora pasa el ratón sobre una imagen o directorio y ábrelo con el plugin imgsxiv. Navega por las imágenes y pulse ^X seguido de ^R para renombrar una imagen.
Para las operaciones de archivo visite sxiv tema # 228.
El plugin pdfview puede convertir y renderizar archivos PDF como texto en el terminal.
Tiene 2 métodos para convertir PDF a texto. Por favor, vaya a través de la secuencia de comandos para los detalles.
1
2
3
4
5
6
7
8
9
#!/usr/bin/env sh
if [ -n "$TMUX" ] ; then
# Sesión tmux en ejecución
tmux split-window -h "vim \"$*\""
else
# Quitar la opción --tab for new window
xfce4-terminal --tab -e "vim \"$*\""
fi
1
2
export VISUAL=ewrap
Importante
Otra opción es combinar y utilizar nnn con un multiplexor como dvtm:
Hay varias formas de ejecutar comandos desde nnn:
Si usa ! para generar un shell en el directorio actual y su shell es bash o zsh, estaría bien añadir:
1
[ -n "$NNNLVL" ] && PS1="N$NNNLVL $PS1"
al rc de su shell. Esto hará que su prompt indique que está dentro de un shell que le devolverá a nnn cuando haya terminado.
Esto junto con cd al salir (vea Configurar cd al salir) se convierte en una poderosa combinación. Además, los scripts quitcd comprueban $NNNLVL para evitar el anidamiento.
Las aplicaciones GUI pueden lanzarse mediante un menú desplegable utilizando el plugin launch. nnn lo recoge de la ubicación del plugin. Si no se encuentra launch, nnn muestra un prompt normal para el nombre ejecutable de la aplicación.
Para configurar launch como un lanzador de aplicaciones independiente, añada una combinación de teclas para abrir launch en un terminal, p. ej,
xfce4-terminal -e "${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/launch
Las aplicaciones GUI también pueden lanzarse desde el prompt. Utilice & para iniciar en segundo plano para que nnn no se bloquee.
Si usted es un sudoer, abra una nueva instancia de nnn desde el prompt incorporado con sudo nnn.
También puede tener un alias corto y dulce (pero poderoso) (que también funciona en el prompt nnn):
1
alias N='sudo -E nnn -dH'
Para utilizar como selector de archivos y redirigir la salida a otros programas, use la opción -p. La opción toma como argumento un fichero de salida (use - para imprimir la lista en stdout).
Formas de seleccionar archivos:
Importante
Ejemplos de casos de uso del modo selector:
// listar algunos archivos ls -l $(nnn -p -) -rw-rw-r-- 1 vaio vaio 14722 Jul 10 07:24 /home/vaio/GitHub/nnn/CHANGELOG -rw-rw-r-- 1 vaio vaio 1472 Jul 7 21:49 /home/vaio/GitHub/nnn/LICENSE -rw-rw-r-- 1 vaio vaio 1697 Jul 10 07:24 /home/vaio/GitHub/nnn/Makefile
// Adjuntar algunos archivos y enviar un correo neomutt -a $(nnn -p -) ...
// Añadir algunos archivos a la lista de reproducción MOC mocp -a $(nnn -p -)
nnn se integra con sshfs y rclone para soportar montajes remotos. Los puntos de montaje (tanto para remotos como para archivos) se crean dentro de:
${XDG_CONFIG_HOME:-$HOME/.config}/nnn/mounts
Al desmontar con éxito, se eliminan los puntos de montaje.
La clave para montar una carpeta remota es c (para conectar).
Nota
El directorio montado también puede ser un enlace simbólico. El directorio de destino debe tener permisos para montar.
Ejemplo de configuración primaria: conectarse al servidor SSH desde el escritorio.
Para conectarse y montar recursos compartidos remotos usando sshfs, nnn requiere que el archivo de configuración ssh ~/.ssh/config tenga las entradas host. sshfs lee este archivo.
Ejemplo de entrada de host para un entorno Termux en un dispositivo Android:
Host * ServerAliveInterval 300 ServerAliveCountMax 2 Host phone HostName 192.168.43.1 User u0_a117 Port 8022 Compression no # Ciphers chacha20-poly1305@openssh.com # ProxyJump jumphost
Una vez que intente conectarse usando sshfs, nnn le pedirá el nombre del host (phone en el ejemplo anterior). Escriba el nombre exacto (tal y como aparece en este archivo) opcionalmente seguido de la ruta en el host remoto que desea montar.
phone <----- Monte la carpeta $HOME de su usuario remoto en `phone` phone:/tmp <----- Monte la carpeta remota `tmp` en `phone`
El host phone se montará en ${XDG_CONFIG_HOME:-$HOME/.config}/nnn/mounts/phone.
Si necesita pasar opciones al comando sshfs, puede hacerlo:
1
export NNN_SSHFS='sshfs -o reconnect,idmap=user,cache_timeout=3600'
Las opciones deben ir precedidas de sshfs y separadas por comas sin espacios entre ellas.
El remoto necesita ser configurado y autenticado de antemano (actividad única). El nombre utilizado para configurar es todo lo que nnn necesita para conectarse y montar (así como desmontar) el servicio remoto localmente.
Si necesita pasar opciones, utilice la variable de entorno dedicada para rclone:
1
export NNN_RCLONE='rclone mount --read-only --no-checksum'
Se puede pasar un máximo de 5 banderas.
Consejo: Para listar todas las remotas en el fichero de configuración de rclone: rclone listremotes.
La opción de desmontaje (que también desmonta archivos montados, por cierto) funciona de dos maneras:
La opción de desmontaje (que también desmonta archivos montados, por cierto) funciona de dos maneras:
Nota
Abra su archivo de notas O directorio (si su editor soporta la apertura de un dir como vim) en su editor favorito como un plugin (ver documentación del plugin para más información):
1
export NNN_PLUG=n:-!vim /home/usuario/Dropbox/Publico/Docs/Notes/note*
Para mantener el archivo sincronizado en todos los sistemas, es posible que desee especificar un archivo sincronizado por un servicio de almacenamiento en la nube o almacenado en un recurso compartido de red.
Para duplicar la entrada actual:
Nota
Para cancelar las operaciones de renombrado o duplicado, pulse Enter en ambas indicaciones sin cambiar el nombre del fichero.
Para crear enlaces simbólicos o duros por lotes:
Las razones sólo se permite el prefijo (y no el nombre completo):
La mayoría de los emuladores de terminal modernos tienen la opción de desactivar las fuentes en negrita.
Testeado con nord-dircolors y nord-kitty.
1
2
BLK="0B" CHR="0B" DIR="04" EXE="06" REG="00" HARDLINK="06" SYMLINK="06" MISSING="00" ORPHAN="09" FIFO="06" SOCK="0B" OTHER="06"
export NNN_FCOLORS="$BLK$CHR$DIR$EXE$REG$HARDLINK$SYMLINK$MISSING$ORPHAN$FIFO$SOCK$OTHER"
Testeado con One Dark dircolors y One for GNOME Terminal.
1
2
BLK="04" CHR="04" DIR="04" EXE="00" REG="00" HARDLINK="00" SYMLINK="06" MISSING="00" ORPHAN="01" FIFO="0F" SOCK="0F" OTHER="02"
export NNN_FCOLORS="$BLK$CHR$DIR$EXE$REG$HARDLINK$SYMLINK$MISSING$ORPHAN$FIFO$SOCK$OTHER"
Una vista previa en vivo es una ventana que muestra información sobre la entrada sobre la que se pasa el cursor. A medida que el cursor se mueve, la ventana de vista previa se actualiza automáticamente.
Hay dos formas de activar las vistas previas en vivo en nnn:
Ambos utilizan la ruta en NNN_FIFO para obtener actualizaciones hover.
Depende de cuántas instancias nnn simultáneas necesite:
1
2
export NNN_FIFO=/tmp/nnn.fifo
Siga las instrucciones de la documentación del plugin para su instalación y configuración general.
Existen 2 plugins de previsualización para nnn, que utilizan diversos mecanismos para mostrar la ventana de previsualización:
Para ejecutar un previsualizador (o cualquier plugin en general) al iniciar nnn, use la opción -P.
La creación de una vista previa en directo tiene dos aspectos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/env sh
# #############################################################################
# Archivo: preview_cmd.sh
# Descripción: Ejemplo mínimo para previsualizar ficheros y directorios
# Sin dependencias externas
# Se puede ampliar fácilmente
# Sale automáticamente cuando el NNN_FIFO se cierra
# Imprime un `árbol` si es un directorio o `cabecera` si es un fichero
# Shell: compatible con POSIX
# Autor: Todd Yamakawa
# Hacer:
# 1. Añadir soporte para más tipos de ficheros
# p.ej. archivos binarios, no deberíamos intentar `encabezar` esos
# Checquear FIFO
NNN_FIFO=${NNN_FIFO:-$1}
if [ ! -r "$NNN_FIFO" ]; then
echo "Unable to open \$NNN_FIFO='$NNN_FIFO'" | less
exit 2
fi
# Leer selección desde $NNN_FIFO
while read -r selection; do
clear
lines=$(($(tput lines)-1))
cols=$(tput cols)
# Imprimer árbol de directorios
if [ -d "$selection" ]; then
cd "$selection" || continue
tree | head -n $lines | cut -c 1-"$cols"
continue
fi
# Imprime cabecera de archivo
if [ -f "$selection" ]; then
head -n $lines "$selection" | cut -c 1-"$cols"
continue
fi
# Algo salió mal
echo "Unknown type: '$selection'"
done < "$NNN_FIFO"
Para crear su propio comando de configuración, necesita seguir los siguientes pasos:
He aquí un ejemplo de función bash/zsh. Para utilizar este ejemplo, tendrá que establecer el comando de vista previa. Para la ventana de vista previa:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
nnn-preview ()
{
# Block nesting of nnn in subshells
if [ -n "$NNNLVL" ] && [ "${NNNLVL:-0}" -ge 1 ]; then
echo "nnn is already running"
return
fi
# El comportamiento por defecto es cd al salir (nnn comprueba si NNN_TMPFILE está configurado)
# Si NNN_TMPFILE se establece en una ruta personalizada, debe ser exportada para que nnn la vea.
# Para cd on quit solo en ^G, quite el "export" y ponga NNN_TMPFILE *exactamente* asi:
# NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd"
# Esto creará un fifo en el que se escribirán todas las selecciones nnn
NNN_FIFO="$(mktemp --suffix=-nnn -u)"
export NNN_FIFO
(umask 077; mkfifo "$NNN_FIFO")
# Comando de previsualización
preview_cmd="/path/to/preview_cmd.sh"
# Use `tmux` split como vista previa
if [ -e "${TMUX%%,*}" ]; then
tmux split-window -e "NNN_FIFO=$NNN_FIFO" -dh "$preview_cmd"
# Usar `xterm` como ventana de previsualización
elif (which xterm &> /dev/null); then
xterm -e "$preview_cmd" &
# Deshabilitar la búsqueda de un programa para utilizar como ventana de vista previa
else
echo "unable to open preview, please install tmux or xterm"
fi
nnn "$@"
rm -f "$NNN_FIFO"
}
nnn soporta múltiples formas de mostrar iconos. Están desactivados por defecto y no se proporcionan en la distribución por defecto para evitar el envío de recursos de terceros. Actualmente soportamos iconos-en-terminal para aquellos que deseen utilizar iconos junto con una fuente de código normal. Alternativamente, puede utilizar las fuentes parcheadas de Nerdfont para añadir iconos a la propia fuente. Esto último es más común para los usuarios de Vim que necesitan fuentes para varios plugins de línea de energía. Independientemente del método, cada método producirá experiencias similares dentro de nnn.
Si su distro y terminal lo soportan, también puede usar Emojis.
Los iconos se pueden personalizar en icons.h.
Necesitará recompilar nnn en lugar de usar la versión por defecto. O puede tomar uno de los binarios estáticos con iconos auto-generados en cada versión.
Tenga en cuenta que su $TERM debe soportar 256 colores para que se muestren los iconos.
Una vez compilado, notará que ahora hay un ejecutable nnn en su raíz. Copie este archivo en el lugar donde normalmente se almacenan estos programas. Una buena forma de comprobarlo es hacer un which nnn en el lugar donde se instaló la versión empaquetada. Simplemente reemplazando ese archivo debería ser suficiente.
Los atajos de teclado están definidos en la estructura bindings en nnn.h. Los usuarios pueden modificarlos para establecer sus atajos preferidos. Después de modificar, nnn necesita ser compilado (vea Instalación Desde el código fuente).
Aunque es fácil de compilar debido a las pocas dependencias de librerías, personalizar los atajos puede ser complicado debido al número de funciones. Para simplificar el proceso, nnn tiene una opción para detectar colisiones de teclas. Después de cambiar las teclas, compile nnn y ejecútelo:
nnn -K
Nota
Existe una combinación de teclas alternativa con el modificador CONTROL (Ctrl, ^) para muchas operaciones. Estos son para los usuarios que prefieren ejecutar nnn en el modo type-to-nav.
Si tiene un abridor personalizado (como nuke) que invoca sólo utilidades CLI, puede indicar lo mismo a nnn:
export NNN_OPENER=/ruta/absoluta/a/nuke # En caso contrario, si nuke está en $PATH # export NNN_OPENER=nuke nnn -c
Para que esté disponible en un entorno de escritorio compatible con XDG como GNOME, KDE, XFCE, etc. se proporciona un fichero nnn.desktop. Para instalarlo, ejecute:
make install-desktop
O copie nnn.desktop a ~/.local/share/applications/.
Esto mostrará una entrada nnn en el menú de aplicaciones de su escritorio, en la búsqueda, en el menú Abrir con de las aplicaciones gráficas, etc.
Tenga en cuenta que cuando se inicia desde un gestor de pantalla (GDM, ...) el entorno de escritorio puede iniciar nnn en un terminal sin llamar a ningún shell de inicio de sesión. Así que si las variables NNN_* se exportan en, por ejemplo, .bashrc, .zshrc, .bash_profile, y no en .profile o .xprofile puede que nunca se obtengan, y por tanto nunca estén disponibles para nnn.
Si quiere mantener sus exportaciones de variables en .bashrc y su gestor de pantalla nunca lo hace, puede cambiar la línea Exec= en nnn.desktop de la siguiente manera:
1
Exec=bash -lc "nnn %f"
O también puede llamar a nnn en un script de interface con las exportaciones necesarias, ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh
# Si usa pywal, tiene que restaurar el esquema aquí
# (cat ~/.cache/wal/sequences &)
export NNN_BMS="D:$HOME/Downloads;v:$HOME/Videos"
export NNN_COLORS="5236"
alias nsel="cat ${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection | tr '\0' '\n'"
# Para usar un abridor CLI, especifique la opción `-c` a `nnn`.
# exportar NNN_OPENER="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/nuke"
# Desenmascare ^Q (if required, see `stty -a`) para quitar nnn
stty start undef
stty stop undef
# Arranque nnn con sus opciones preferidas
nnn "$@"
Llámelo, por ejemplo, nwrap, hágalo ejecutable con chmod +x nwrap y colóquelo en su PATH.
1
2
3
4
5
6
7
8
9
10
11
12
13
[Desktop Entry]
Name=NNN for gnome
GenericName=NNN
Comment=Supercute cli
Keywords=shell;prompt;command;commandline;cmd;nnn;
Exec=gnome-terminal --class "NNN" -- bash -ilc "nnn %f"
Icon=org.gnome.Terminal
Type=Application
Categories=GNOME;GTK;System;TerminalEmulator;
StartupNotify=true
X-GNOME-SingleWindow=false
OnlyShowIn=GNOME;Unity;
StartupWMClass=NNN
--class "NNN" se utiliza para agrupar todas las instancias nnn y StartupWMClass=NNN para indicar al lanzador qué ventanas deben asociarse a este icono.
Para usar nnn como el cuadro de diálogo de selección de archivos de su navegador, siga las instrucciones del navegador de su elección.
Cree un script kdialog en su PATH del tipo:
1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh
while :; do case $1 in
--getsavefilename) file="$2" break ;;
--version) printf ""; exit ;;
--*) shift ;;
*) break ;;
esac done
file="${file##/*/}"
st -c picker sh -c "nnn -J -p - '$file' | awk '{ print system(\"[ -d '\''\"\$0\"'\'' ]\") ? \$0 : \$0\"/$file\" }' > /proc/$$/fd/1"
Este ejemplo establece la clase para st a picker y nnn usa un picker de sesión con nombre. Esto le permite, por ejemplo, tener la ventana del selector flotando por defecto en su gestor de ventanas y nnn recuerda dónde estaba su anterior objetivo "Guardar como...". La opción -J se asegura de que la sesión guardada guarde la posición del cursor en el fichero/directorio seleccionado. Sustitúyalo por su terminal preferido y las opciones nnn si procede.
Luego cree una envoltura de navegador que lance su navegador con XDG_CURRENT_DESKTOP=KDE:
#!/bin/sh XDG_CURRENT_DESKTOP=KDE <browser binary> "$@"
Esto hará que chromium busque kdialog para abrir archivos, asegúrese de que el script kdialog viene en su PATH antes que el binario del paquete kdialog si lo tiene instalado.
Chromium ahora abrirá nnn en modo selector para operaciones "Guardar como/Subir archivo", permitiéndole:
Para restaurar la funcionalidad xdg-open dentro de chromium, necesitará un wrapper (una interface) xdg-open que restaure XDG_CURRENT_DESKTOP al valor correcto para tu entorno:
#!/bin/sh XDG_CURRENT_DESKTOP='' /usr/bin/xdg-open "$@"
Instale xdg-desktop-portal-termfilechooser y cree su archivo de configuración en $XDG_CONFIG_HOME/xdg-desktop-portal-termfilechooser/config:
1
2
[filechooser]
cmd=/home/<user>/.local/bin/ffnnn
Cree el script wrapper ffnnn especificado (el nombre y la ubicación no importan) en su PATH de la forma siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh
guardar="$3"
sugerencia="$4"
salida="$5"
file="${sugerencia##/*/}"
if [ "$guardar" = 1 ]; then
touch "$sugerencia"
fi
st -c picker sh -c "nnn -p - '$sugerencia' | awk '{ print system(\"[ -d '\''\"\$0\"'\'' ]\") ? \$0 : \$0\"/$file\" }' > '$salida'"
if [ "$guardar" = 1 ]; then
if [ ! -s "$salida" ] || [ ! -s "$sugerencia" ]; then
rm "$sugerencia"
fi
fi
Entonces asegúrese de que widget.use-xdg-desktop-portal.file-picker == 1 en about:config y firefox debería usar nnn como diálogo selector de archivos.
Si su DE soporta la configuración de keybindings para aplicaciones, simplemente instale nnn.desktop, como se explicó anteriormente. A continuación, establezca una combinación de teclas desde la configuración de su DE.
Es posible que desee crear un script envoltorio para lanzar nnn en un terminal, por ejemplo con xfce4-terminal:
#!/bin/sh xfce4-terminal -e "nnn \"$*\""
Pongale un nombre, por ejemplo, nnnfm, hagalo ejecutable y colóquelo en su PATH.
Ahora puede establecer una combinación de teclas para ejecutar nnnfm desde la configuración de su DE.
Ahora vaya al menú de aplicaciones preferidas desde Configuración (o ejecute exo-preferred-applications -c) y seleccione nnnfm como gestor de archivos predeterminado.
En la sección de atajos de teclado de su archivo de configuración de WM, necesita añadir un atajo para lanzar nnn en una terminal. Este es un ejemplo para sxhkd, necesita cambiar xfce4-terminal por la terminal que quiera usar:
# Gestor de archivos super + n xfce4-terminal -e "nwrap $*"
Esta sección es específica de Linux. Los usuarios de BSD y macOS pueden pulsar Ctrl-T (^T) para comprobar el progreso.
advcpmv se usa para mostrar el progreso de cp y mv en Linux.
Para habilitar la función, copie los binarios avdcpmv-patched en su PATH. Tenga en cuenta que es importante renombrar los binarios como cpg y mvg.
sudo cp src/cp /usr/local/bin/cpg sudo cp src/mv /usr/local/bin/mvg
Use la opción -r del programa para mostrar el progreso de las operaciones.
Puede controlar el directorio activo de nnn desde un plugin. Encuentre las instrucciones aquí.
Descargo de responsabilidad: Esto es un abuso grave de su pager, pero le enriquece la vida.
Sería conveniente que su pager eligiera cómo ver los archivos que no son de texto.
Puede crear su propio manejador de pager personalizado o puede empezar descargándolo:
$ curl -OL https://github.com/0xACE/lesspipe/raw/personal/lesspipe.sh
o git clone https://github.com/0xACE/lesspipe y luego asegúese de cambiar a la rama personal donde se han hecho algunas actualizaciones.
y luego tener el archivo en alguna ruta, digamos:
~/git/lesspipe/lesspipe.sh
y luego añada:
export PAGER=less [ -r "$HOME/git/lesspipe/lesspipe.sh" ] && export LESSOPEN="| $HOME/git/lesspipe/lesspipe.sh %s" export LESS='-Ri '
a su ~/.bashrc o a su rc de shell.
Esto le permitirá ver archivos en nnn pulsando la tecla Abrir en PAGER (Open in Pager, p), también abrirá su archivo canalizado a través de lesspipe.sh que ha canalizado el archivo a otros intérpretes.
Tenga en cuenta que es posible que desee instalar los siguientes paquetes:
antiword - soporte para archivos word cabextract - soporte para archivos cab cdrkit (cdrtools) - soporte para archivos iso fastjar - soporte para archivos jar html2text (python-html2text, python2-html2text) - soporte para archivos html mediainfo - soporte para algunos metadatos de archivos multimedia viu - soporte para algunos archivos de imagen imagemagick - soporte para algunos archivos de imagen p7zip - soporte para archivos 7za perl rpmextract - soporte para archivos rpm unrar - soporte para archivos rar unrtf - soporte para archivos rtf unzip - soporte para archivos zip source-highlight - soporta resaltado de sintaxis
En el futuro ese enlace lesspipe.sh podría cambiar para usar atool en lugar de estos gestores de archivos separados.
En términos generales, cualquier utilidad de terminal puede integrarse fácilmente con nnn. Para transferencias remotas de archivos, lftp es la herramienta preferida. Vamos a discutir cómo el flujo de trabajo se puede simplificar con las capacidades de nnn y lftp combinadas.
Use la tecla Abrir con (Open witch) y escriba lftp -f para conectarse y transferir archivos a/desde un sistema remoto utilizando un archivo de script lftp. Tenga en cuenta que debe pulsar la tecla c en el prompt press 'c' for cli mode (presione 'c' para modo cli).
Archivo de ejemplo:
# lftp script_file para transferir ficheros a/desde un servidor # server has sshd service running and support scp # abrir conexión open -u user,password -p port sftp://ip_servidor # listar archivos en el servidor ls # crear un directorio mkdir subidas # subir algunos archivos al directorio creado put -O subidas archivo1 archivo2 # descargar algunos archivos desde el directorio actual pget -O descargas archivo3 archivo4
Usaremos un ejemplo genérico de configuración lftp usando alias lftp que puede seguir para conectarse a un servidor SSH y transferirle su selección nnn.
alias mob open -u username,password sftp://direccion_ip_servidor:puerto
# obtener nnn selección y escribir el comando `put` en un fichero alias lst "!cat ${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection | xargs -0 -I fname echo "put" \'fname\' > files.lftp" # subir los archivos al directorio subidas alias mv "source files.lftp; !rm files.lftp"
lftp :~> mob lftp :~> lst lftp :~> mv lftp :~> bye
Lista de comandos admitidos: lftp :~> ?.
Ayuda de un comando en particular: lftp :~> help put.
Si necesita usar un directorio con frecuencia, puede anclarlo durante una sesión utilizando el atajo de teclado ,. Cuando tenga un directorio anclado, al pulsar la tecla de favoritos (b o Ctrl-/ (^/)) aparecerá , como primera tecla:
Teclas de marcadores: , w t m i d v n
Pulse , después de la tecla de favoritos para visitar el directorio anclado.
Puede anclar un directorio cada vez.
El filtrado es la manera en que nnn busca archivos en un directorio. ¿Sabía que es posible aplicar un nuevo filtro sobre resultados ya filtrados?
nnn le ofrece una opción para montar archivos al pulsar Enter en un archivo. Pulse m para montar el archivo y nnn montará el archivo y le llevará al punto de montaje del archivo montado.
Añada algunos ficheros en el archivo montado, vuelva al directorio de configuración de nnn (${XDG_CONFIG_HOME:-$HOME/.config}/nnn) y pase el ratón sobre el punto de montaje del archivo. Pulse u para desmontar el archivo y generar un paquete con los nuevos ficheros. El paquete original se guarda con la extensión .orig.
nnn exporta la ruta del archivo sobrevolado como $nnn cuando se pulsa el símbolo del sistema o se generan accesos directos del shell. Puede utilizar la variable para ejecutar un comando en el archivo sobrevolado:
ls -l "$nnn"
En nnn puede editar y ver fácilmente los cambios en Markdown, páginas man, etc. Para ello es necesario utilizar un abridor de archivos CLI. Puede utilizar el plugin nuke, un abridor de ejemplo personalizable para especificar sus aplicaciones preferidas. Para establecer nuke como el abridor por defecto:
export NNN_OPENER=/ruta/absoluta/a/nuke
e inicie nnn como nnn -c.
La opción -c indica a nnn que el abridor es un abridor sólo CLI (ten en cuenta que nuke también puede abrir archivos en aplicaciones GUI; lee la documentación del archivo).
Ahora, cuando pulse Enter en un archivo Markdown, nuke intentará abrirlo en glow o una página de manual en el paginador man.
Para editar el archivo en $VISUAL (o $EDITOR, o vi), pasa el ratón sobre el archivo y pulse e.
nnn permite a los usuarios seleccionar un fichero cada vez, un rango de ficheros o todos los ficheros de un directorio juntos. Una vez que haya terminado de seleccionar, puede ejecutar un comando en todos los archivos utilizando el archivo de selección como entrada:
xargs -0 ls -l < "${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection"
Si usa esto con frecuencia, tenga un acceso directo en su archivo rc:
export sel=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection
y simplifique el comando como:
xargs -0 ls -l < $sel
Incluso si compila nnn sin libreadline, los indicadores de entrada nativos soportan varias teclas similares a readline - Ctrl-A (^A), Ctrl-B (^B), Ctrl-D (^D), Ctrl-E (^E), Ctrl-F (^F), Ctrl-K (^K), Ctrl-U (^U), Ctrl-W (^W).
nnn le permite ejecutar comandos personalizados como si fueran plugins. Por ejemplo, para abrir un archivo de registro en lnav, añada un par clave:comando tipo plugin en su variable de entorno NNN_PLUG:
export NNN_PLUG='l:-_lnav $nnn*'
Pulse ; (seleccionar acceso directo a complemento) seguido de l para abrir un archivo de registro en lnav.
Puede controlar varios aspectos al ejecutar comandos y plugins (por ejemplo, omitir la actualización del directorio tras ejecutar un plugin, omitir la confirmación del usuario tras ejecutar un comando) e incluso ejecutar aplicaciones GUI como un plugin. Visite plugins para más detalles.
Nota: lnav se tomó como ejemplo, puede abrir fácilmente archivos de registro en lnav editando el abridor de ejemplo personalizable nuke.
Si sus archivos de texto se abren en el navegador, compruebe la opción -e del programa.
Use el siguiente comando para establecer aplicaciones predeterminadas para mimetypes cuando use xdg-open como abridor:
xdg-mime default application mimetype(s) e.g. xdg-mime default sxiv.desktop image/jpeg image/png
Si su sistema utiliza mimeopen, es posible que tenga que instalar perl-file-mimeinfo.
Más en aplicaciones y abridores por defecto.
Si los caracteres unicode no se muestran correctamente, compruebe lo siguiente:
puede no manejar correctamente la pulsación de teclas cuando se usa con tmux (ver problema #104 para más detalles). Establezca TERM=xterm-256color para solucionarlo.
Por defecto tmux anuncia soporte para 8 colores. Para mostrar iconos en tmux añada lo siguiente al fichero de configuración de tmux:
set -g default-terminal "screen-256color"
Si se compila con netbsd-curses (vea Compilar con soporte para musl libc/) ajústelo a:
set -g default-terminal "xterm-256color"
Si la tecla Esc no funciona como se espera, añada lo siguiente en .tmux.conf:
set -g escape-time 0
Para iniciar nnn dentro de tmux use una función shell:
1
2
3
4
5
6
7
8
n ()
{
if [ -n "$TMUX" ]; then
nnn -a $@
else
tmux new-session nnn -a $@
fi
}
nnn no establece el cwd del terminal mientras se navega. Así que lo siguiente puede no funcionar:
tmux new-window -c "#{pane_current_path}"
Una posible solución es extraer la ruta del comando cwd que usa nnn:
lsof -c nnn | grep cwd
Para obtener la ruta del último comando cwd ejecutado:
lsof -w -c nnn | grep cwd | tail -n 1 | awk '{print $9}'
Un ejemplo de script tmux_split_curdir.sh:
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env sh
cwd=
cc=$(tmux display -p '#{pane_current_command}')
if [ $cc == "nnn" ] ; then
cwd=$(lsof -w -c nnn | grep cwd | tail -n 1 | awk '{print $9}')
else
cwd=$(tmux display -p '#{pane_current_path}')
fi
tmux split-window -c "$cwd"
Si añade este script a la ruta de tmux, podra ejecutarlo con run-shell:
bind -n KEYS run-shell "tmux_split_curdir.sh"
Si una combinación de teclas Ctrl no funciona, compruebe si está enmascarada debido a la configuración de la línea del terminal:
stty -a
Si ese es el caso, borre (undef) la configuración. Ej:
stty start undef stty stop undef stty lwrap undef stty lnext undef
Puede hacerlo al iniciar nnn. Consulte los scripts quitcd.
Si su PAGER es less, elimine la opción -F (sale automáticamente si se puede mostrar todo el archivo en la primera pantalla). Hay otras pantallas que también usan less.
Tenga en cuenta que el comando less toma sus parámetros por defecto de la variable de entorno $LESS, por lo que puede que necesite eliminar -F de la inicialización de su shell.
TL;DR: Si necesita un renombrador por lotes completo, instale plugins. nnn autodetecta e invoca el plugin interno .nmv (un script bash) que es completo.
El renombrador por lotes incorporado implementado en nnn es muy simplificado. Es de una sola pasada - lee el nombre/ruta de los ficheros de forma iterativa (desde una lista de ficheros fuente) y los renombra/desplaza (como se especifica en el número de línea correspondiente en una lista de ficheros renombrados/destino). No maneja eliminaciones ni realiza ningún análisis previo para tener en cuenta bucles de renombrado, intercambios, sustituciones, etc.
Tenga en cuenta que la instancia del editor debe esperar a que finalice la edición y se guarden los cambios (por ejemplo, use -w con VSCode).
Hemos visto este problema con WSL y Putty, donde a veces los caracteres de espacio repetidos no se imprimen correctamente.
Para solucionarlo:
export TERM=rxvt-unicode // OR export TERM=rxvt-unicode-256color
Explicación detallada.
La vista de lista es una vista temporal de enlaces simbólicos. Para evitar recordar las rutas temporales a todas las vistas de lista, la ruta actual se elimina cuando se carga la siguiente lista. Esto también está en línea con el hecho de que find no busca dentro de enlaces simbólicos a directorios. Si necesita buscar las entradas dentro de una lista cargada, visite el directorio original y ejecute la búsqueda refinada.
TL;DR: En versiones anteriores a la v2.7, use la combinación de teclas k para alternar la selección si tiene problemas con Ctrl-y (^Y).
En OpenBSD y FreeBSD (y probablemente también en macOS) stty asigna Ctrl-y (^Y) a DSUSP por defecto. Esto significa que teclear Ctrl-y suspenderá nnn como si tecleara Ctrl-z (^Z) (puede traer nnn de vuelta al primer plano emitiendo fg) en lugar de entrar en modo multiselección. Puede comprobarlo con stty -a. Si incluye el texto dsusp = ^Y, emitiendo stty dsusp undef desactivará este DSUSP y dejará que nnn reciba el Ctrl-y (^Y) en su lugar.
Existe un problema conocido con el gestor de ventanas Amethyst en macOS: los redibujos no funcionan correctamente y la pantalla se rompe. Consulte el problema #521 para más detalles.
Cuando se ejecuta dentro de un contenedor docker, nnn sale instantáneamente. La solución es crear el contenedor con la bandera --init.
Asegúrese de que la fuente primaria de su terminal es la adecuada (por ejemplo, si utiliza O_NERD, la fuente primaria debe ser una fuente nerd). Asegúrese también de que la configuración regional de su sistema es la adecuada.
Al usar ST, algunos iconos pueden aparecer truncados. Hay un parche disponible para solucionar este problema en un hilo de reddit aquí.
nnn respeta el valor de la variable de ambiente LC_COLLATE - el efecto de esto depende de su libc. Pruebe a establecerlo en algo estándar/bien soportado como "C" o "C.UTF8" y compruebe si se soluciona el problema o no (vea #1652).
Soportar la selección multi-directorio es técnicamente desafiante; nnn usa muchas optimizaciones para hacerlo imperceptible en la mayoría de los casos, pero seleccionar-todo (incluyendo filtrado) o inversión mientras ya se tienen muchos archivos seleccionados puede tomar algún tiempo.
Cuando se probó en el Motorola Photon Q (CPU ARM con 13,54 bogomips) y un directorio con 10K ficheros, incluso los casos más complicados que se nos ocurrieron terminaron en 10 segundos. Si la selección anterior era pequeña o continua, tanto seleccionar todo (completo como en filtro) como invertir fueron instantáneos.
Tamaño del binario (o script) y uso de memoria de nnn y algunos otros FMs populares (que existían antes que nnn) mientras se visualiza un directorio con 13.5K archivos (0 directorios), ordenados por tamaño/du:
BINSZ VIRT RES SHR S %MEM COMMAND 650K 139720 91220 8460 S 1.1 ranger 1M 50496 15328 4076 S 0.2 vifm 1M 72152 12468 7336 S 0.2 mc 110K 15740 4348 2460 S 0.1 nnn -t d
Resultados con opciones make agresivas, binario estático y compresión upx:
$ make O_NORL=1 O_NOMOUSE=1 O_NOLC=1 O_NOBATCH=1 O_NOSSN=1 O_NOFIFO=1 O_QSORT=1 O_NOUG=1 static strip $ upx nnn-static $ top BINSZ VIRT RES SHR S %MEM COMMAND 582K 3136 3056 4 S 0.0 nnn-static -cdDEnQrux -t d ~/images // 11K files 582K 2428 2240 4 S 0.0 nnn-static -cdDEnQrux -t d /usr/bin // 1.5K files
Resultados con 1950 archivos:
$ musl-gcc -O3 -DNORL -I../netbsd-curses/libcurses -o nnn-shared src/nnn.c -Wl,-Bsymbolic-functions -L/opt/netbsd-curses -lcurses -lterminfo $ strip nnn-shared $ musl-gcc -O3 -DNORL -I../netbsd-curses/libcurses -o nnn-static src/nnn.c -Wl,-Bsymbolic-functions -L/opt/netbsd-curses -lcurses -lterminfo -static $ strip nnn-static BINSZ VIRT RES SHR S %MEM COMMAND 102K 1952 1580 868 S 0.0 nnn-shared -dn 354K 1164 824 348 S 0.0 nnn-static -dn
El tamaño binario despojado de ls es de 130,7K.
nnn tarda menos del 50% del tiempo en listar un directorio con 2083 ficheros:
$ time nnn /usr/bin 0.00user 0.01system 0:00.02elapsed 42%CPU (0avgtext+0avgdata 3540maxresident)k 1608inputs+0outputs (3major+325minor)pagefaults 0swaps $ export LS_COLORS='ex=00:su=00:sg=00:ca=00:' $ time ls -l /usr/bin 0.01user 0.01system 0:00.05elapsed 47%CPU (0avgtext+0avgdata 3800maxresident)k 784inputs+0outputs (0major+303minor)pagefaults 0swaps
nnn realiza aproximadamente un tercio de las llamadas al sistema realizadas por ls (todas las lecturas se tomaron en el arranque en frío).
$ time strace -c nnn -d /usr/bin | wc -l % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 92.56 0.014030 7 1989 newfstatat 4.95 0.000751 188 4 getdents 1.19 0.000180 3 57 1 stat 0.53 0.000081 81 1 inotify_add_watch 0.15 0.000023 2 15 close 0.11 0.000017 2 10 brk 0.10 0.000015 1 14 openat 0.08 0.000012 2 6 write 0.07 0.000010 0 23 3 ioctl 0.05 0.000007 0 15 fstat 0.05 0.000007 7 1 1 unlink 0.04 0.000006 1 8 read 0.04 0.000006 0 14 mmap 0.04 0.000006 6 1 inotify_rm_watch 0.03 0.000005 5 1 sysinfo 0.01 0.000002 2 1 lseek 0.00 0.000000 0 2 lstat 0.00 0.000000 0 10 mprotect 0.00 0.000000 0 1 munmap 0.00 0.000000 0 9 rt_sigaction 0.00 0.000000 0 9 7 access 0.00 0.000000 0 1 execve 0.00 0.000000 0 1 arch_prctl 0.00 0.000000 0 1 inotify_init1 ------ ----------- ----------- --------- --------- ---------------- 100.00 0.015158 2194 12 total 0.01user 0.05system 0:00.08elapsed 84%CPU (0avgtext+0avgdata 3524maxresident)k 4576inputs+0outputs (10major+545minor)pagefaults 0swaps 0 $ export LS_COLORS='ex=00:su=00:sg=00:ca=00:' $ time strace -c ls -l /usr/bin | wc -l % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 42.88 0.011274 6 1989 lstat 27.69 0.007281 4 1989 1989 lgetxattr 20.74 0.005454 4 1548 1548 getxattr 5.82 0.001529 3 442 readlink 1.35 0.000355 89 4 getdents 0.38 0.000100 3 31 write 0.24 0.000064 2 33 5 openat 0.18 0.000048 1 34 close 0.17 0.000046 3 17 lseek 0.16 0.000042 1 40 mmap 0.16 0.000041 4 11 munmap 0.11 0.000030 1 30 fstat 0.04 0.000011 2 5 brk 0.04 0.000011 11 1 mremap 0.03 0.000007 0 17 read 0.00 0.000000 0 20 mprotect 0.00 0.000000 0 2 rt_sigaction 0.00 0.000000 0 1 rt_sigprocmask 0.00 0.000000 0 2 2 ioctl 0.00 0.000000 0 12 12 access 0.00 0.000000 0 4 socket 0.00 0.000000 0 4 4 connect 0.00 0.000000 0 1 execve 0.00 0.000000 0 2 2 statfs 0.00 0.000000 0 1 arch_prctl 0.00 0.000000 0 1 futex 0.00 0.000000 0 1 set_tid_address 0.00 0.000000 0 1 set_robust_list 0.00 0.000000 0 1 prlimit64 ------ ----------- ----------- --------- --------- ---------------- 100.00 0.026293 6244 3562 total 0.02user 0.12system 0:00.13elapsed 106%CPU (0avgtext+0avgdata 3728maxresident)k 3752inputs+0outputs (7major+526minor)pagefaults 0swaps 1989
/* compare.c */ int main(void) { for (int i = 0; i < 1000000; i++) printf("hello\n"); return 0; } $ time -p ./compare real 1.89 user 0.20 << sys 1.25 --------------------------------- # compare.sh #!/bin/bash for (( i = 0; i < 1000000; i++ )) do echo hello done exit 0 $ time -p ./compare.sh real 5.88 user 4.66 << sys 1.21
nnn se bifurcó inicialmente de noice, pero hoy es significativamente diferente. Decidí bifurcarlo porque.
v1.0 fue lanzado el 13 Abr, 2017.
nnn está en desarrollo activo y se añaden nuevas capacidades continuamente. Para tener una visión más reciente de las características actuales por favor visite la lista de características en la página principal del proyecto y la lista ToDo.
El archivo de fuentes (tarball) está firmado con una clave PGP, que puede verificar de la siguiente manera.
$ gpg --verify nnn-<VERSION>.tar.gz.sig nnn-<VERSION>.tar.gz gpg: Signature made ... gpg: using RSA key BBAD0B2F3093A7C3377A8F6BA75979F35C080412 gpg: Good signature from "Arun Prakash Jana <...>" Primary key fingerprint: BBAD 0B2F 3093 A7C3 377A 8F6B A759 79F3 5C08 0412
nnn proporciona varias variables make para personalizar las características a incluir o excluir. Esto también ayuda a reducir aún más el tamaño del binario.
POSIX regex es la opción por defecto. Para habilitar PCRE, instale la biblioteca de desarrollo PCRE y establezca O_PCRE.
En Ubuntu 18.04:
sudo apt install libpcre3-dev make O_PCRE=1
En macOS
brew install pcre # if you're using Homebrew sudo port install pcre # if you're using MacPorts make O_PCRE=1
make O_NORL=1
make O_NOMOUSE=1
make O_NOBATCH=1
Úselo si tiene plugin .nmv (script bash).
make O_NOFIFO=1
make O_NOSSN=1
make O_NOUG=1
El almacenamiento y descodificación de la información de usuarios y grupos aumenta considerablemente el uso de memoria residente.
make O_ICONS=1
Más detalles aquí. Esta variable no es compatible con O_NERD=1, O_EMOJI=1 y O_NOLC=1.
make O_NERD=1
Más detalles aquí. Esta variable no es compatible con O_ICONS=1, O_EMOJI=1 y O_NOLC=1.
make O_EMOJI=1
Más detalles aquí. Esta variable no es compatible con O_ICONS=1, O_NERD=1 y O_NOLC=1.
make O_NOLC=1
Los caracteres no admitidos en los nombres de archivo se sustituyen por ?. Las operaciones con archivos funcionan sin problemas.
make O_NOX11=1
Desactiva las notificaciones de finalización de cp, mv, rm, la sincronización de la selección con el portapapeles del sistema y el anuncio del título de xterm al cambiar de directorio.
make O_QSORT=1
make O_CTX8=1
Atención: Las sesiones guardadas pueden dejar de ser utilizables cuando se cambia el número de contextos.
make O_MATCHFLTR=1
Descarta la clave de filtro cuando no hay coincidencias.
make O_NOSORT=1
Esta opción es útil en el modo type-to-nav (tipo para navegación). Carga los directorios más rápido en la entrada inicial. Cualquier filtro ordena el listado. Utilizable sólo con xterm 256 colores.
Instala la librería de desarrollo GPM y establece la variable O_STATIC del Makefile.
En Ubuntu 16.04/18.04:
sudo apt install libgpm-dev make O_STATIC=1 strip
En macOS: Por el momento no es posible compilar con -static en macOS. Así que por favor ignore esta opción si está en macOS.
Advertencia
Esta opción no funcionará en Mac OS X a menos que todas las bibliotecas (incluida libgcc.a) se hayan compilado también con -static. Dado que no se proporciona una versión estática de libSystem.dylib ni de crt0.o, esta opción no es útil para la mayoría de la gente.
Verificar el binario
file nnn nnn: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=1be54d27687f83cf42393dd59dba2723798956de, stripped 20
Un uso cuidadoso de las variables make, la compilación estática y la compresión upx pueden hacer maravillas.
$ make CFLAGS+=-march=native O_NORL=1 O_NOMOUSE=1 O_NOLC=1 O_NOBATCH=1 O_NOSSN=1 O_NOFIFO=1 O_QSORT=1 O_NOUG=1 static $ upx nnn-static $ ls -l nnn-static -rwxrwxr-x 1 user user 593808 Nov 2 00:45 nnn-static # top output (/usr/bin has 1544 files) PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 31953 user 20 0 2428 2244 4 S 0.0 0.0 0:00.02 ./nnn-static -cdDEnQrux /usr/bin
En macOS la librería ncurses por defecto es demasiado antigua y puede causar problemas. Instale una versión más actualizada desde homebrew y enlaza con ella añadiendo la ruta de la librería a $LDLIBS.
$ LDLIBS="-L/opt/homebrew/opt/ncurses/lib/" make
La versión de nnn disponible como paquete estable de Raspbian está muy desactualizada (v2.2), lo que significa que la única forma de obtener una versión reciente de nnn es compilar desde el código fuente.
Como ejemplo, para compilar nnn v3.5 para una Raspberry Pi ejecutando Raspbian Buster, obtenga nnn-v3.5.tar.gz de los activos de lanzamiento, ponga el archivo tarball en la Pi, y luego haga lo siguiente:
sudo apt install pkg-config libncursesw5-dev libreadline-dev
tar -zxvf nnn-v3.5.tar.gz cd nnn-3.5
sudo make strip install
Lo anterior fue probado en una Raspberry Pi Zero W ejecutando Buster y funcionó sin problemas.
Instale los plugins y utilice la opción -x del programa.
Vea jarun/nnn#1200
Aquí, hilo de discusión. Consulte este parche para ahorrar un poco más en terminfo.
Script de compilación para Ubuntu siguiendo de cerca este procedimiento.
sudo apt install musl musl-dev musl-tools
git clone https://github.com/sabotage-linux/netbsd-curses cd netbsd-curses git checkout v0.3.2 make CC=musl-gcc CFLAGS="-O3 -Wall -fPIC" -j$(($(nproc)+1)) all sudo mkdir /opt/nnn-libs sudo cp libcurses/libcurses.so libterminfo/libterminfo.so /opt/nnn-libs/ make clean make CC=musl-gcc CFLAGS=-O3 LDFLAGS=-static all-static sudo cp libcurses/libcurses.a libterminfo/libterminfo.a /opt/nnn-libs/
git clone https://github.com/void-linux/musl-fts --depth=1 cd musl-fts ./bootstrap.sh ./configure make CC=musl-gcc CFLAGS=-O3 LDFLAGS=-static -j$(($(nproc)+1)) sudo cp .libs/libfts.a /opt/nnn-libs/ make clean make CC=musl-gcc CFLAGS=-O3 -j$(($(nproc)+1)) sudo cp .libs/libfts.so.0.0.0 /opt/nnn-libs/libfts.so
wget https://downloads.sourceforge.net/pcre/pcre-8.45.tar.bz2 ./configure --enable-unicode-properties --enable-pcre16 --enable-pcre32 make CFLAGS=-O3 CC=musl-gcc LDFLAGS=-static sudo cp .libs/libpcre.a /opt/nnn-libs make CFLAGS=-O3 CC=musl-gcc sudo cp .libs/libpcre.so.1.2.13 /opt/nnn-libs
# compartida musl-gcc -O3 -DNORL -DNOMOUSE -std=c11 -Wall -Wextra -Wshadow -I/path_to/netbsd-curses/libcurses -I/path_to/musl-fts -o nnn src/nnn.c -Wl,-Bsymbolic-functions -lpthread -L/opt/nnn-libs -lcurses -lterminfo -lfts # personalizada compartida musl-gcc -O3 -DNORL -DNOLC -DNOMOUSE -DNOBATCH -DNOFIFO -DTOURBIN_QSORT -DNOSSN -DNOUG -DNOX11 -std=c11 -Wall -Wextra -Wshadow -I/path_to/netbsd-curses/libcurses -I/path_to/musl-fts -o nnn src/nnn.c -Wl,-Bsymbolic-functions -lpthread -L/opt/nnn-libs -lcurses -lterminfo -lfts # Nota 1: Para la compilación estática añada `-static` a los comandos anteriores # Nota 2: Para activar pcre, añada `-I./pcre-8.45` y `-lpcre`. # la librería strip strip nnn
# Para lib compartida export LD_LIBRARY_PATH=/opt/nnn-libs:$LD_LIBRARY_PATH # ./nnn
Esta sección se aplica a Linux como host, Android en arm64 target y un terminal xterm-256color.
Vamos a enlazar estáticamente contra libreadline y libncursesw por lo que no necesitaremos instalarlos por separado en el teléfono.
Para cualquier otra cosa, por favor ajuste en consecuencia.
./configure --enable-widec --enable-termcap --with-fallbacks=xterm-256color --disable-stripping --host=aarch64-linux-android --prefix=$ANDROID_ENV
make && make install
Al escribir file nnn, se debería ver:
nnn: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /system/bin/linker64, not stripped
Mueva el binario a su teléfono y ejecútelo con su emulador de terminal favorito.
Para depurar (debugging) nnn ejecútelo en modo debug:
make O_DEBUG=1
Para ejecutar el binario depurado, ejecute:
./nnn
En el modo de depuración nnn genera información de depuración adicional que se registra en el archivo nnndbg ubicado (por prioridad) en:
/tmp/nnndbg or, the directory in which nnn is run
Para registrar información adicional, utilice la opción DPRINTF_*.