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
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 Home | Ir al inicio de línea actual |
CTRL+E o End | Ir al final de línea actual |
CTRL+M o Enter | Inserta un retorno de carro en la posición del cursor |
CTRL+I o TAB | Tabular el cursor |
CTRL+Y | Ir al inicio de la página actual |
CTRL+→ (RIGHT) | Ir hacia la siguiente palabra |
CTRL+← (LEFT) | Ir hacia la palabra anterior |
ALT+G | Ir hacia el número de la línea indicada en el prompt |
Edición (copiar, pegar, cortar, deshacer, rehacer, etc)
Teclas ⌨️ | Descripción |
---|---|
ALT+U | Deshacer |
ALT+E | Rehacer |
CTRL+K | Cortar |
ALT+T | Cortar desde la posición del cursor hasta el final de la línea |
CTRL+U | Pegar |
CTRL+O | Guardar como |
Buscar, insertar, remplazar texto, justificar, seleccionar
Teclas ⌨️ | Descripción |
---|---|
CTRL+W o F6 | Busca la cadena de caracteres y sitúa el cursor en la coincidencia. |
ALT+Q | Ir a la ocurrencia anterior de la última búsqueda |
ALT+W | Ir a la siguiente ocurrencia de la última búsqueda |
ALT+G | Ir a un número de línea en concreto |
CTRL+R - CTRL+T | Insertar el contenido de otro archivo de origen en la posición del cursor |
ALT+R | Remplazar el texto buscado |
Alt+J | Justifica todo el texto |
Ctrl+J | Justifica La línea actual |
ALT+A | Activa el cursor en modo selección |
Habilitar o deshabilitar configuraciones del editor
Teclas ⌨️ | Descripción |
---|---|
ALT+C | Habilitar | Deshabilitar la barra de status al pie de la pantalla |
ALT+I | Habilitar | Deshabilitar autoindent |
ALT+X | Habilitar | Deshabilitar la ayuda al pie de la pantalla |
ALT+X | Habilitar | Deshabilitar el coloreado de sintaxys |
ALT+O | Habilitar | Deshabilitar la conversión de Tabs a espacios |
ALT+N | Habilita la numeración en el editor de líneas |
Ctrl+M | Habilitar | Deshabilitar el soporte del Mouse en el editor |
ALT+Z | Habilitar | Deshabilitar supensión del editor |
ALT+S | Habilitar | Deshabilitar ajuste de líneas suave del editor |
ALT+P | Habilitar | Deshabilitar mostrar espacios en blancos |
Información y otros
Teclas ⌨️ | Descripción |
---|---|
ALT+D | Muestra información del total de caracteres, palabras y líneas del texto en la barra de status |
CTRL+C | Muestra la información de la posición actual del cursor en el texto (línea/columna/carácter) |
CTRL+L | Redibujar la pantalla |
CTRL+G | Abre el menú de ayuda del nano. Q Para cerrar el menú de ayuda del nano |
CTRL+T | Ejecuta 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 F2 | Cerrar 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+XM-X
: donde X es cualquier carácter ASCII excepto [
Ej: esto es equivalente a ALT+XSh-M-X
: donde X es cualquier carácter ASCII
Ej: esto es equivalente a SHIFT-ALT+XFn
: 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
Nombre | Descripción |
---|---|
help | Invoca el visor de ayuda |
cancel | Cancela 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ón | Descripción | Predeterminado |
---|---|---|
set autoindent | Habilita la indentación automática | No |
set backup | Guarda copias del archivo en edición con el mismo nombre (pero finalizado en ~ ) | No |
set backupdir directory | Hace y mantiene una copia de seguridad de cada archivo cuando lo guardamos | No |
set historylog | Habilita el uso de ~/.nano/search_history para guardar y leer las cadenas de búsqueda y remplazo | No |
set constantshow | Muestra la posición del cursor en la barra de estado | No |
set justifytrim | Cuando se justifica texto, los espacios que se encuentran a la derecha se eliminarán automáticamente | No |
set nohelp | No muestra la ayuda al pie de la pantalla | No |
set nonewlines | No agrega automáticamente una nueva línea al final de los archivos | No |
set linenumbers | Habilita la numeración en cada línea | No |
set tabsize 0-9 | Define el tamaño de la tabulación | 8 |
set titlecolor fg,bg | Cambia el color de la barra de título del editor | white,blue |
set statuscolor fg,bg | Cambia el color de la barra de status inferior que se muestran en el editor | white,green |
set numbercolor fg,bg | Cambia el color de la numeración del editor en cada línea | cyan,black |
set keycolor fg,bg | Cambia el color de los accesos directo que muestra en la parte inferior el editor | cyan,black |
set functioncolor fg,bg | Cambia el color de las funciones de los accesos directo que se muestran en la parte inferior del editor | green,black |
set softwrap | Habilita el ajuste de líneas suave | No |
set positionlog | Guarda la posición del cursor | No |
set boldtext | Utiliza 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:
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