nano, un editor de texto para la terminal. Personalización y productividad.

Una de las herramientas que mas utilizo en el terminal es un editor de texto, en particular utilizo nano. ¿Porque utilizar no utilizar un editor de texto gráfico, tipo Gedit o Geany?. La respuesta la podemos encontrar en el uso que le demos al terminal. Por ejemplo, si vamos a modificar un archivo de configuración que se encuentra en un servidor, sin interfaz gráfico, o bien, utilizamos un editor de texto tipo nano o vim o bien, copiamos el archivo a nuestro equipo, lo modificamos y lo devolvemos, ¿qué será mejor?. Ya te lo digo yo, inicialmente puede serte mas útil pasar por un editor gráfico, como los que he mencionado antes, pero a la larga, lo mas productivo es aprender a utilizar nano o mucho mas productivo si aprendes vim.

Respecto a porque utilizar nano frente a vim, esto ya es cuestión de cuanto tiempo estés utilizando este tipo de herramientas. Me refiero a que si las utilizas de forma puntual, con nano tienes mas que suficiente. Ahora bien, si vas a hacer un uso intensivo de ellas, seguro que le vas a sacar mucho mas provecho a vim. Mientras que nano es minimalista y muy usable, vim tiene una curva de aprendizaje importante, lo que hace que el uso de vim inicialmente sea complicado.

nano, un editor de texto para la terminal. Personalización.

GNU nano

¿Que es nano?

GNU nano es un editor de texto minimalista y amigable. Sin embargo, no solo nos permite editar texto, sino que además tiene otras características muy interesantes que lo hacen especialmente útil para modificar archivos de configuración en la terminal, 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.

Entre otras características, nano nos ofrece las siguientes,

  • Operaciones de búsqueda y reemplazo interactivas
  • Permite las hacer y deshacer acciones
  • Coloreado de sintaxis
  • Auto sangrado
  • Desplazado suave por líneas en lugar de por pantalla
  • Permite ir directamente a un número de línea
  • Bloqueo de archivos
  • Autoguardado de archivos

Opciones de inicio y algunos atajos de teclado

Aunque nano permite especificar determinadas opciones vía la línea de comandos, creo que es mucho mas interesante y efectivo, hacerlo vía el archivo de configuración. Sin embargo, si tienes interés en ver las opciones que te ofrece la línea de comandos, las puedes encontrar en la siguiente tabla, o bien ejecutando la orden nano -h.

También es posible habilitar alguna de estas opciones con un atajo de teclado. En el caso de que este atajo exista también lo he añadido en la table siguiente,

Opción corta Opción larga Función Atajo de teclado
-h, -? –help Mostrar este mensaje
+LÍNEA,COLUMNA Comenzar en la línea número LÍNEA, y columna COLUMNA
-A –smarthome Habilitar tecla ‘smart home’ Alt+H
-B –backup Guardar respaldo de los ficheros existentes Alt+B
-C –backupdir= Directorio donde guardar ficheros de respaldo únicos
-D –boldtext Usar negrita en lugar de texto inverso
-E –tabstospaces Convertir tabulaciones a espacios al escribir
-F –multibuffer Habilitar múltiples búfer de ficheros Alt+F
-H –historylog Registrar y leer el histórico de cadenas de búsqueda/reemplazo
-I –ignorercfiles No leer los ficheros nanorc
-K –rebindkeypad Arreglar el problema de confusión del teclado numérico
-L –nonewlines No añadir avances de línea al final de los ficheros
-N –noconvert No convertir los ficheros desde el formato DOS/Mac Alt+N
-O –morespace Usar una línea más para edición Alt+O
-Q –quotestr= Marcador de cita
-R –restricted Modo restringido
-S –smooth Desplazamiento por línea en lugar de por pantalla completa Alt+S
-T <núm> –tabsize=<núm> Fijar el ancho de tab a núm columnas
-U –quickblank Borrado rápido de la barra de estado
-V –version Imprimir información sobre la versión y salir
-W –wordbounds Detectar límite entre palabras más detalladamente
-Y –syntax= Definición de sintaxis a usar para coloreado
-c –const Mostrar constantemente la posición del cursor Alt+C
-d –rebinddelete Arreglar el problema de confusión Retroceso/Suprimir
-i –autoindent Sangrado automático de nuevas líneas Alt+I
-k –cut Cortar desde el cursor al final de línea Alt+K
-l –nofollow No seguir enlaces simbólicos, sobreescribirlos
-m –mouse Habilitar el uso del ratón Alt+M
-o –operatingdir=
-p –preserve Conservar teclas XON (^Q) y XOFF (^S)
-q –quiet Ignora problemas de arranque de forma silenciosa, por ejemplo con filas rc
-r <núm> –fill=<núm> Fijar el límite de ajuste de líneas en núm columnas
-s –speller=
-t –tempfile Autosalvar al salir, no preguntar
-u –undo Permite deshacer genérico [EXPERIMENTAL]
-v –view Modo visualización (sólo lectura)
-w –nowrap No ajusta líneas largas Alt+L
-x –nohelp No mostrar las dos líneas de ayuda Alt+X
-z –suspend Habilitar suspensión Alt+Z
-$ –softwrap Habilita el ajuste de línea suave Alt+$
-a, -b, -e, (se ignora, está por compatibilidad con Pico)
-f, -g, -j (se ignora, está por compatibilidad con Pico)

Atajos de teclado

Una importante característica de los editores de texto, así como otras aplicaciones, que funcionan directamente en la terminal, es el uso de atajos de teclado. Es necesario conocer los atajos de teclado para conseguir que la aplicación resulte mas o menos productiva.

A continuación puedes encontrar un listado de estos atajos de teclado, junto con su uso. Una nota, en general se puede utilizar, para los atajos de teclado, la tecla Alt o la tecla ESC, sin embargo, verás que en la siguiente tabla, a veces indico una o la otra. Esto es así porque a mi no me funciona siempre la tecla Alt e indico en que combinaciones no me han funcionado. Por el contrario, la tecla ESC siempre funciona. Por otro lado ten en cuenta que para activar alguna de estos atajos es posible que necesites utilizar la tecla mayúsculas.

He marcado en negrita las que considero necesarias para el funcionamiento normal.

  • Ctrl+G. Muestra la ayuda.
  • Ctrl+X. Cierra el archivo / Sale de nano.
  • Ctrl+O. Guarda el archivo.
  • Ctrl+R. Inserta otro archivo.
  • Ctrl+W. Busca una cadena o una expresión regular.
  • Alt+R. Reemplaza una cadena o expresión regular.
  • Ctrl+K. Corta la línea actual.
  • Ctrl+U. Pega en la línea actual.
  • Ctrl+J. Justifica el párrafo.
  • Ctrl+T. Invoca el corrector ortográfico.
  • Ctrl+C. Muestra la posición del cursor.
  • Alt+G. Va a una línea.
  • Ctrl+Y. Se desplaza una pantalla hacia arriba.
  • Ctrl+V. Se desplaza una pantalla hacia abajo.
  • Alt+|. Se desplaza a la primera línea del fichero.
  • Alt+?. Se desplaza a la última línea del fichero.
  • Alt+W. Repite la última búsqueda.
  • Alt+]. Se desplaza al corchete correspondiente.
  • Alt+A. Marca texto desde la posición actual del cursor.
  • ESC+6. Copia el texto marcado.
  • Alt+}. Sangra la línea actual.
  • ESC+{. Quita el sangrado de la línea actual.
  • Alt+U. Deshace la última operación.
  • Alt+E. Rehace la última operación deshecha.
  • Ctrl+B. Ir hacia atrás un carácter.
  • Ctrl+F. Ir hacia delante un carácter.
  • Ctrl+. Ir hacia atrás una palabra.
  • Ctrl+. Ir hacia adelante una palabra.
  • Ctrl+A. Ir al principio de la línea actual.
  • Ctrl+E. Ir al final de la línea actual.
  • Ctrl+P. Ir a la línea anterior.
  • Ctrl+N. Ir a la línea siguiente.
  • Ctrl+. Ir al bloque de texto anterior.
  • Ctrl+. Ir al bloque de texto siguiente.
  • Alt+(. Ir al principio del párrago.
  • Alt+). Ir al final del párrafo.
  • Alt+<. Cambiar al anterior búfer de fichero.
  • Alt+>. Cambiar al siguiente búfer de fichero.
  • Alt+V. Inserta la próxima pulsación literalmente.
  • Ctrl+I. Inserta un carácter de tabulación.
  • Ctrl+M. Inserta un retorno de carro.
  • Ctrl+D. Borra el carácter bajo el cursor.
  • Ctrl+H. Birrar el carácter a la izquierda del cursor.
  • Alt+T. Corta desde el cursor hasta el final de la línea.
  • Alt+J. Justifica el archivo completo.
  • Alt+D. Cuenta el número de palabras, líneas y caracteres.
  • Ctrl+L. Redibuja la pantalla actual.
  • Ctrl+Z. Suspende el editor.
  • Ctrl+]. Intenta completar la palabra actual.
  • ESC+3. Comenta ó descomenta la línea actual, o las marcadas.
  • Alt+X. Activar o desactivar la ayuda a pie de página.
  • Alt+C. Activar o desactivar la posición del cursor.
  • Alt+O. Uso de una línea mas para editar.
  • Alt+S. Desplazamiento suave.

Además nano también permite redefinir atajos de teclado, también dentro del archivo de configuración, como veremos mas adelante.

El archivo de configuración de nano, .nanorc

El archivo de configuración de nano se encuentra en el directorio de inicio para cada uno de los usuarios, ~/.nanorc o /etc/nanorc, en el caso de la configuración por defecto. Evidentemente, debemos modificar la de cada usuario. En el podemos establecer muchas de las opciones que podemos introducir por la línea de ejecución de nano. Esto nos será muy útil si siempre utilizamos las mismas opciones.

A continuación puedes encontrar la mayoría de las opciones que se pueden configurar a través del archivo nanorc.

  • set autoindent. Auto sangrado
  • set backup. Cuando guardas un archivo se crea una copia de seguridad añadiendo una tilde al nombre del archivo.
  • set backupdir directory. Hace y mantiene una copia de seguridad de cada archivo cuando lo guardamos.
  • set backwards. Hace búsquedas hacia atrás por defecto.
  • set boldtext. Utiliza las negritas para el título, la barra de estado, etc.
  • set brackets "string". Establece los caracteres tratados como de cierre cuando se justifican parágrafos . Los que se tienen que definir por defecto son los siguientes, “”’)>]}”.
  • set casesensitive. Hace las búsquedas sensibles a mayúsculas y minúsculas.
  • set constantshow. Muestra la posición del cursor en la barra de estado.
  • set cut. Utiliza la opción de cortar hasta el final de la línea en lugar de cortar la línea completa.
  • set fill number. Realiza un justificado al número de columna indicado.
  • set functioncolor fgcolor,bgcolor. Indica la combinación de colores a utilizar la descripción de funciones en las dos líneas de ayuda que aparecen en el pie de la pantalla.
  • set historylog. Habilita el uso de ~/.nano/search_history para guardar y leer las cadenas de búsqueda y reemplazo..
  • set justifytrim. Cuando se justifica texto, los espacios que se encuentran a la derecha se eliminarán de forma automática.
  • set keycolor fgcolor,bgcolor. Especifica la combinación de colores de las líneas de ayuda.
  • set linenumbers. Muestra el número de línea.
  • set locking. Habilita el bloqueo de archivos al estilo vim.
  • set matchbrackets string. Establece los caracteres que pueden ser encontrados por una búsqueda de corchetes. En general serán los siguientes “(<[{)>]}”.
  • set morespace. Utiliza la línea que hay justo debajo del título, que normalmente no se utiliza.
  • set mouse. Habilita el uso del ratón. En el caso de estar habilitado, cuando hacemos clic con el ratón se desplaza el cursor, o incluso se puede utilizar para marcar combinado con la tecla mayúsculas.
  • set multibuffer. Cuando se lee un archivo con Ctrl+R, se inserta en un nuevo buffer por defecto.
  • set noconvert. No convierte archivos de DOS ó Mac.
  • set nohelp. No muestra la ayuda al pie de la pantalla.
  • set nonewlines. No añade de forma automática una nueva línea al final del archivo.
  • set nowrap. No justifica todo el texto.
  • set numbercolor fgcolor,bgcolor. Especifica la combinación de color a utilizar por número de línea.
  • set operatingdir. nano solo leerá archivos que se encuentren en este directorio y subdirectorios.
  • set positionlog. Guarda la posición del cursor.
  • set preserve. Guarda las teclas XON y XOFF (Ctrl+Q y Ctrl+S).
  • set punct string. Establece los caracteres que son tratados como puntuación cuando se justifican párrafos. Por defecto estos valores son “!.?”.
  • set quickblank. Los mensajes que aparecen en la barra de estado desaparecen después de que pulsemos una tecla en lugar de 25.
  • set quiet. nano no informará de errores que puedan existir en el archivo de configuración nanorc.
  • set quotestr string Se utiliza para justificar párrafos en correos electrónicos.
  • set rebinddelete. Interpreta la tecla Supr distinta a la tecla Retroceso. En principio, no es necesario establecer esta configuración, salvo que en tu equipo no funcione de forma correcta.
  • set rebindkeypad. Lo mismo que en el caso anterior pero con el teclado numérico. En general tampoco es necesario configurar esta opción.
  • set regexp. Utiliza expresiones regulares en las búsquedas por defecto.
  • set showcursor. Pone el cursor en el elemento seleccionado.
  • set smarthome. Utiliza la tecla Inicio de forma inteligente.
  • set smooth. El desplazado es mas suave. Se hace por líneas en lugar de por pantallas.
  • set softwrap. Se habilita el justificado.
  • set speller spellprog. Utiliza un comprobador de ortografía externo en lugar del propio de nano.
  • set statuscolor fgcolor,bgcolor. Especifica la combinación de colores a utilizar para la barra de estado.
  • set suspend. Permite que nano sea suspendido.
  • set tabsize number. Establece el número de columnas para cada salto de tabulador. Por defecto es 8.
  • set tabstospaces. Convierte saltos de tabulador en espacios.
  • set tempfile. Guarda automáticamente al salir, sin preguntar.
  • set titlecolor fgcolor,bgcolor. Especifica la combinación de colores a utilizar para el título.
  • set unix. Guarda un archivo con el formato de Unix. El comportamiento por defecto de nano es guardarlo en el mismo formato en el que se encontraba el archivo.
  • set view. Inhabilita la posibilidad de modificar el archivo.
  • set whitespace string. Define los dos caracteres para indicar la presencia de tabuladores y espacios. Deben ser caracteres que ocupen una sola columna.
  • set wordbounds. Detecta las palabras finales de forma diferente, tratando los signos de puntuación como parte de esas palabras.
  • set wordchars string. Especifica que otros caracteres además delos alfanuméricos tienen que ser consideradas como parte de una palabra.

Redefiniendo atajos de teclado

Si no terminas de entenderte con los atajos de teclado definidos por defecto en nano, siempre puedes definir los tuyos propios. Esto solo puede tener el problema que sucede cuando te encuentras en otro nano, pero siempre podrás sobreescribir la configuración para que se comporte como te interesa.

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

Por ejemplo, para que guardar sea Ctrl+S, lo que tendríamos que hacer sería añadir la siguiente línea en nuestro archivo ~\.nanorc,

bind ^S savefile main

Así, si quieres que los atajos de teclado sean los que normalmente utilizas en otras aplicaciones, solo tendrás que añadir las siguientes líneas,

## Rebinding Keys

bind ^S savefile main
bind ^O insert main
bind ^C copytext main
bind ^X cut main
bind ^V uncut main
bind ^Q exit main
bind ^F whereis main
bind ^R replace main

Resaltado de sintaxis

Respecto al resaltado de sintaxis, ahí tenemos todo un mundo. Sin embargo, no debemos de preocuparnos. Aunque existe la posibilidad de crear nuestra propia definición, en /usr/share/nano, tenemos la definición para varios lenguajes. Con esto no solo tienes para los mas utilizados, sino que además tienes pie para crear los que tu necesites.

¿Como incorporarlos para su uso? De nuevo, en nuestro archivo ~\.nanorc, añadiremos los archivos con la siguiente orden,

include path-to-file

Puedes incluir tantos como necesites, o mejor, los que utilices de forma mas frecuente, así en mi caso,

## Highlight

include /usr/share/nano/css.nanorc
include /usr/share/nano/html.nanorc
include /usr/share/nano/javascript.nanorc
include /usr/share/nano/json.nanorc
include /usr/share/nano/nanorc.nanorc
include /usr/share/nano/python.nanorc
include /usr/share/nano/sh.nanorc
include /usr/share/nano/xml.nanorc

Si eres muy avaricioso, puedes sustituir todo esto por include /usr/share/nano/*.nanorc

Mejorando tu productividad con nano

Como has podido ver a lo largo de este artículo, las posibilidades que ofrece nano son suficientes para trabajar con él con toda comodidad. Pero además si, modificamos a nuestro gusto el archivo de configuración podremos conseguir resultados espectaculares, y sobre todo, y lo mas importante, mejorar nuestra productividad.

Existen una serie de opciones interesantes a tener en cuenta, pero que no vienen establecidas por defecto y que nos pueden ayudar.

  • Múltiples archivos. Por defecto nano solo nos permite trabajar con un archivo a la vez. Sin embargo, podemos habilitar la opción de trabajar con varios archivos, configurando la opción set multibuffer. Así cuando abramos un nuevo archivo este entrará en un nuevo búfer. Para pasar de un búfer a otro utilizaremos los atajos de teclado Ctrl+> y Ctrl+<.
  • Autosangrado. Otra opción interesante que nos ofrece nano, es la posibilidad del sangrado automático. Para ello tendremos que definir la opción set autoindent.
  • una vez abierto nano, si queremos abrir un archivo utilizaremos el atajo de teclado correspondiente. Ahora bien, una vez nos pregunta el nombre del archivo podemos utilizar el atajo de teclado Ctrl+T y nos mostrará un gestor de archivos con el que desplazarnos hasta encontrar el archivo que necesitamos.

La configuración que utilizo está disponible en GitHub, puedes descargarla utilizando la siguiente orden,

wget https://raw.githubusercontent.com/atareao/dotfiles/master/.nanorc

Más información,