Entrada

Shell: Editor de texto Nano

Nano es un editor de texto en la terminal que destaca por su simplicidad

¿Que es NANO?

Nano (oficialmente GNU nano) es un editor de texto de línea de comandos muy ligero y amigable. Sin embargo, no solo permite editar texto, sino que además tiene otras características muy interesantes que lo hacen especialmente útil para modificar archivos de configuración, crear lanzadores, y todo este tipo de acciones. Pero no solamente esto, puesto que al soportar coloreado de sintaxis, también puede ser utilizado para escribir código en la programación.
Esta disponible en la mayoría de distribuciones Linux, en macOS y Windows.

Abrir y Editar Archivos con Nano

En la mayoría de distribuciones GNU/Linux, Nano viene preinstalado por defecto, por lo que no necesitas instalar nada para comenzar a usarlo.

Para comprobar que está instalado y verificar su versión, ejecuta el siguiente comando:

1
nano --version

La forma de abrir Nano y editar un archivo es usando el siguiente comando:

1
nano file_example.txt

Si deseas abrir un archivo que se encuentra en otra carpeta, debes epecificar la ruta:

1
nano /path/to/directory/demo.txt

Si el archivo no existe, nano lo creará automáticamente.

Una vez dentro, puedes escribir directamente

abriendo archivo

Para abrir más de un archivo en el editor, se pasan estos como argumentos separados despues de llamar a nano. Ejemplo:

1
nano archivo_1.txt archivo_2.txt

Para que esta opción de abrir más archivos funcione, debes habilitar la opción de multibuffer en el archivo de configuración .nanorc. Ejemplo: set multibuffer

Moverse entre archivos

Puedes cambiar entre archivos abiertos en el buffer con la siguiente combinación:

  • ALT+ (RIGHT): Ir hacia el siguiente archivo
  • ALT+ (LEFT): Ir hacia el anterior anterior

Nano también puede abrir archivos colocando el cursor en una línea o buscando una palabra específica, muy útil para editar archivos largos o navegar rápidamente a una sección del archivo:

🔍 Buscar una palabra al abrir un archivo

Puedes indicar una cadena de búsqueda al abrir un archivo. Por ejemplo:

1
nano +c/input test.py

El prefijo +c/ le dice a Nano que realice una búsqueda con la palabra indicada a continuación.

📌 Ir a una línea específica al abrir un archivo

Si conoces el número de línea al que quieres ir, puedes indicarlo así:

1
nano +10 test.py

Esto abrirá test.py y posicionará el cursor directamente en la línea 10.

Como caso especial: si en lugar de un nombre de archivo se da un guión (-), nano leerá los datos de la entrada estándar.

Sin embargo, si queremos abrir un archivo utilizaremos el atajo de teclado correspondiente, el predeterminado es CTRL + R. Ahora bien, una vez nos pregunta el nombre del archivo podemos utilizar el atajo de teclado CTRL+T y nos mostrará un explorador de archivos con el que desplazarnos hasta encontrar el archivo que necesitamos, en este modo podemos presionar Ctrl+/ para escribir algún patrón de búsqueda y cambiar a un nuevo directorio.

Opciones y atajos de teclado

Moverse en diferentes direcciones en el texto

Teclas ⌨️​Descripción
CTRL+F o (RIGHT)Ir hacia siguiente letra
CTRL+B o (LEFT)Ir una letra atrás
CTRL+P o (UP)Subir una línea
CTRL+N o (DOWN)Bajar una línea
CTRL+A o HomeIr al inicio de línea actual
CTRL+E o EndIr al final de línea actual
CTRL+M o EnterInserta un retorno de carro en la posición del cursor
CTRL+I o TABTabular el cursor
CTRL+YIr al inicio de la página actual
CTRL+ (RIGHT)Ir hacia la siguiente palabra
CTRL+ (LEFT)Ir hacia la palabra anterior
ALT+GIr hacia el número de la línea indicada en el prompt

Edición (copiar, pegar, cortar, deshacer, rehacer, etc)

Teclas ⌨️Descripción
ALT+UDeshacer
ALT+ERehacer
CTRL+KCortar
ALT+TCortar desde la posición del cursor hasta el final de la línea
CTRL+UPegar
CTRL+OGuardar como

Buscar, insertar, remplazar texto, justificar, seleccionar

Teclas ⌨️Descripción
CTRL+W o F6Busca la cadena de caracteres y sitúa el cursor en la coincidencia.
ALT+QIr a la ocurrencia anterior de la última búsqueda
ALT+WIr a la siguiente ocurrencia de la última búsqueda
ALT+GIr a un número de línea en concreto
CTRL+R - CTRL+TInsertar el contenido de otro archivo de origen en la posición del cursor
ALT+RRemplazar el texto buscado
Alt+JJustifica todo el texto
Ctrl+JJustifica La línea actual
ALT+AActiva el cursor en modo selección

Habilitar o deshabilitar configuraciones del editor

Teclas ⌨️Descripción
ALT+CHabilitar | Deshabilitar la barra de status al pie de la pantalla
ALT+IHabilitar | Deshabilitar autoindent
ALT+XHabilitar | Deshabilitar la ayuda al pie de la pantalla
ALT+XHabilitar | Deshabilitar el coloreado de sintaxys
ALT+OHabilitar | Deshabilitar la conversión de Tabs a espacios
ALT+NHabilita la numeración en el editor de líneas
Ctrl+MHabilitar | Deshabilitar el soporte del Mouse en el editor
ALT+ZHabilitar | Deshabilitar supensión del editor
ALT+SHabilitar | Deshabilitar ajuste de líneas suave del editor
ALT+PHabilitar | Deshabilitar mostrar espacios en blancos

Información y otros

Teclas ⌨️Descripción
ALT+DMuestra información del total de caracteres, palabras y líneas del texto en la barra de status
CTRL+CMuestra la información de la posición actual del cursor en el texto (línea/columna/carácter)
CTRL+LRedibujar la pantalla
CTRL+GAbre el menú de ayuda del nano. Q Para cerrar el menú de ayuda del nano
CTRL+TEjecuta un comando, si el comando ingresado en el prompt devuelve un output lo pega en la posición del cursor en el archivo actual (disponible en Windows).
CTRL+X o F2Cerrar nano, nos pregunta si guardamos los cambios

Redefinir atajos de teclado

Si no terminas de convencerte con los atajos de teclado predeterminados, siempre puedes sobreescribir la configuración para que se comporte como nosotros queremos.

El formato de key debe ser:

  • \^X : donde X es una letra, o uno de varios caracteres ASCII (@,],\,\^,_), o la palabra Space
    Ej: esto es equivalente a CTRL+X

  • M-X : donde X es cualquier carácter ASCII excepto [
    Ej: esto es equivalente a ALT+X

  • Sh-M-X : donde X es cualquier carácter ASCII
    Ej: esto es equivalente a SHIFT-ALT+X

  • Fn : donde n es cualquier valor numérico de 1 al 24
    Ej: esto es equivalente a F2

La forma de redifinir un atajo de teclado es: bind key function menu

Por ejemplo, para que copiar y pegar sean los atajos tradicionales (CTRL+C - CTRL+V). Lo que tendríamos que hacer sería añadir la siguiente línea a nuestro archivo .nanorc:

bind ^C copy main
bind ^V paste all

La forma que se desvincula un atajo de menu (o de todos los menús donde existe la tecla, se usa all) es: unbind key menu

1
2
unbind ^C all
unbind ^V all

Las funciones que podemos vincular a los atajos de teclados pueden ser:

Clic: ver nombre de funciones
NombreDescripción
helpInvoca el visor de ayuda
cancelCancela el comando actual

Estos son algunos bind que yo tengo definido en el archivo ~/.nanorc

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
# [Binding]
# [-- Actions --]
bind ^Q exit all # Salir del editor
bind ^S savefile main # Guardar
#bind ^B gotodir browser # Explorador 
#bind ^O insert main #  Abre un archivo (multibuffer) o inserta texto de un archivo
#bind ^P location main # Informa la posición actual del cursor
bind ^K comment main # Comenta o descomenta la línea actual o las líneas marcadas.
bind ^Space complete main # Completa (cuando es posible) el fragmento de la palabra del búfer actual

# [-- Edit --]
bind ^C copy main # Copiar
bind ^V paste all # Pegar
bind ^X cut all # Cortar
bind ^Z undo main # Deshacer
bind ^E redo main # Rehacer
#bind ^R replace main # Remplazar

# [-- Strings --]
# [Python]
bind Sh-M-P "print("")" main

# [HTML]
bind M-1 "<h1></h1>" main
bind M-2 "<h2></h2>" main
bind M-3 "<h3></h3>" main
bind M-4 "<h4></h4>" main
bind M-5 "<h5></h5>" main
bind M-6 "<h6></h6>" main

Archivo .nanorc para la configuración (usuario)

Para crear el archivo sencillamente introduce el siguiente comando:

1
touch ~/.nanorc

Para editarlo con nano introduce el siguiente comando:

1
nano ~/.nanorc

Dentro ya podríamos agregar cualquiera de las opciones que se listan a continuación:

OpciónDescripciónPredeterminado
set autoindentHabilita la indentación automáticaNo
set backupGuarda copias del archivo en edición con el mismo nombre (pero finalizado en ~)No
set backupdir directoryHace y mantiene una copia de seguridad de cada archivo cuando lo guardamosNo
set historylogHabilita el uso de ~/.nano/search_history para guardar y leer las cadenas de búsqueda y remplazoNo
set constantshowMuestra la posición del cursor en la barra de estadoNo
set justifytrimCuando se justifica texto, los espacios que se encuentran a la derecha se eliminarán automáticamenteNo
set nohelpNo muestra la ayuda al pie de la pantallaNo
set nonewlinesNo agrega automáticamente una nueva línea al final de los archivosNo
set linenumbersHabilita la numeración en cada líneaNo
set tabsize 0-9Define el tamaño de la tabulación8
set titlecolor fg,bgCambia el color de la barra de título del editorwhite,blue
set statuscolor fg,bgCambia el color de la barra de status inferior que se muestran en el editorwhite,green
set numbercolor fg,bgCambia el color de la numeración del editor en cada líneacyan,black
set keycolor fg,bgCambia el color de los accesos directo que muestra en la parte inferior el editorcyan,black
set functioncolor fg,bgCambia el color de las funciones de los accesos directo que se muestran en la parte inferior del editorgreen,black
set softwrapHabilita el ajuste de líneas suaveNo
set positionlogGuarda la posición del cursorNo
set boldtextUtiliza las negritas para el título, barra de estado, etc.No

Mis preferencias de las opciones que más uso:

1
2
3
4
5
6
7
8
9
10
11
12
# [Editor]
set fill 0
set multibuffer
set linenumbers
set softwrap
set boldtext
set tabsize 4
set titlecolor lightred,lightblack
set statuscolor yellow
set numbercolor lightred
set keycolor yellow
set functioncolor lightred

Coloreado de sintaxis para Nano

Nano contiene por defecto varios archivos de configuración, ubicados comúnmente en el directorio /usr/share/nano/ o /etc/nano/, que vienen con las definiciones de sintaxis para diferentes lenguajes de programación y formatos de archivo. Estos archivos tienen nombres como python.nanorc, html.nanorc, bash.nanorc, entre otros, y especifican cómo deben colorearse palabras clave, comentarios, cadenas, etc.

En Linux:

archivos nanorc

Además, Nano permite personalizar aún más estas reglas o incluir nuevas, ya sea editando los archivos existentes o creando tus propios archivos .nanorc. Para que Nano aplique estas configuraciones automáticamente al abrir archivos, es común incluir directivas include en el archivo de configuración del usuario: (~/.nanorc), como por ejemplo:

1
include "/usr/share/nano/python.nanorc"

Esto le indica a Nano que cargue el resaltado de sintaxis definido para Python cada vez que se edite un archivo .py

Un comando sencillo que nos va a incluir todos los complementos de resaltado de sintaxis incluidos de forma predeterminada, y todos los que agregue a /usr/share/nano:

1
find /usr/share/nano -name '*.nanorc' -printf "include %p\n" >> ~/.nanorc

Resaltado de Sintaxis

Colorear los diferentes elementos sintácticos de un archivo se realiza a través de expresiones regulares. Esto es inherente imperfecto, porque las expresiones regulares no son lo suficientemente poderosas para analizar completamente un archivo. Sin embargo, las expresiones regulares pueden hacer mucho y son fáciles de hacer, por lo que son una buena opción para un editor pequeño como Nano.

Para cada tipo de archivo se puede definir una sintaxis separada a través de los siguientes comando. Comience la definición de una sintaxis con este nombre:

1
syntax "nombre" [" fileregex " ...] 

Cuando se ejecuta Nano, esta sintaxis se activarás automáticamente si el nombre de archivo actual coincide con la expresión regular.

1
header "regex" ...

Si de todas las sintaxis definidas no coincide ningún fileregex, entonces compare este regex (o regex) con la primera línea del archivo actual, para determinar si esta sintaxis debe usarse para él.

1
comment "string"

Use la cadena dada para comentar y descomentar líneas. Si la cadena contiene un carácter de barra vertical \ o de tubería |, esto designa comentarios de estilo corchete. Por ejemplo "/*|*/" para archivos CSS, "#" para archivos de Python.

1
color fgcolor,bgcolor "regex"...

Aplica el color de primer plano y el fondo especificados a todas las coincidencias declaradas en la expresión regular.

1
icolor fgcolor,bgcolor "regex"...  

Igual que color, excepto que la coincidencia no distingue entre mayúsculas y minísculas.

Extras

Presionamos CTRL+T e introducimos el comando adecuado:

  • Ejecutar un script de python y volcar su resultado en un Buffer
    1
    
    start python -i script.py
    
Esta entrada está licenciada bajo CC BY 4.0 por el autor.