Salta al contenuto principale

nano: l'editor di testo più semplice da terminale

Inviato da tuxsa il

Prima o poi, sul terminale, bisogna modificare un file: una configurazione di nginx, un file hosts, uno script, una riga di crontab. nano è l'editor pensato per chi vuole farlo senza dover imparare niente: le scorciatoie principali sono scritte sempre in fondo allo schermo.

Cos'è

nano è un editor di testo che funziona dentro il terminale, senza interfaccia grafica, quindi utilizzabile anche attraverso ssh su un server. Fa parte del progetto GNU ed è preinstallato su Debian, Ubuntu e molte altre distribuzioni; se manca, si installa con sudo apt install nano. Rispetto a vim o emacs, più potenti ma con una curva di apprendimento ripida, nano si usa subito: si scrive, si salva, si esce.

Cosa fa

Apre un file (o ne crea uno nuovo), lo mostra a schermo e permette di modificarlo con la tastiera: scrivere, cancellare, tagliare e incollare righe, cercare e sostituire testo, saltare a una riga. Le operazioni si eseguono con combinazioni di tasti. Nella guida a schermo si scrivono così:

  • ^ significa il tasto Ctrl: ^X è Ctrl+X;
  • M- significa il tasto Alt (Meta): M-U è Alt+U.

Come si usa

$ nano [opzioni] [file]

Il mouse e le frecce funzionano come ci si aspetta. Gli esempi usano file d'esempio (appunti.txt, script.sh).

Esempio 1: aprire un file e capire lo schermo

$ nano appunti.txt
  GNU nano 7.2                    appunti.txt
Lista della spesa
pane
latte






^G Aiuto    ^O Scrivi   ^W Cerca    ^K Taglia   ^C Posizione
^X Esci     ^R Leggi    ^\ Sostituisci ^U Incolla ^T Esegui

In alto ci sono la versione e il nome del file; al centro il testo; in fondo l'elenco delle scorciatoie principali (le etichette dipendono dalla lingua del sistema). Se il file non esiste, nano lo crea al primo salvataggio. Se si scrive subito il testo, compare nel punto in cui si trova il cursore. Per arrivare al file giusto: nano percorso/del/file.

Esempio 2: salvare e uscire

Ctrl+O   salva (chiede il nome del file: Invio per confermare)
Ctrl+X   esce

Si salva con Ctrl+O (Write Out): nano propone il nome del file e basta premere Invio. Si esce con Ctrl+X. Se ci sono modifiche non salvate, nano chiede se salvarle: S (o Y, a seconda della lingua) per salvare e poi Invio per confermare il nome, N per uscire senza salvare, Ctrl+C per annullare e tornare al file. Un errore comune è chiudere con Ctrl+X credendo di aver già salvato: se non c'è nessuna domanda, vuol dire che il file era già salvato.

Esempio 3: muoversi nel testo

Frecce        sposta il cursore
Ctrl+A        inizio riga          Ctrl+E     fine riga
Ctrl+Y        pagina su            Ctrl+V     pagina giù
Alt+\         inizio del file      Alt+/      fine del file
Ctrl+_        va a una riga (e colonna) precisa
Ctrl+C        mostra posizione (riga, colonna) del cursore

Per i file lunghi servono i salti: Ctrl+_ (si ottiene con Ctrl+Maiusc+-; in alternativa Alt+G) chiede il numero di riga e ci porta là. È molto utile quando un messaggio di errore indica "errore alla riga 42". Dalla riga di comando si può anche aprire il file direttamente a una riga: nano +42 script.sh.

Esempio 4: cercare e sostituire

Ctrl+W        cerca (Invio per avviare)
Alt+W         vai alla occorrenza successiva
Ctrl+\        cerca e sostituisci
              (poi: Y = sostituisci questa, A = tutte, N = salta)
Alt+C         attiva/disattiva la distinzione tra maiuscole e minuscole
Alt+R         attiva/disattiva le espressioni regolari

Con Ctrl+W si scrive il testo da cercare; Alt+W passa alla occorrenza successiva. Per sostituire si usa Ctrl+\: nano chiede cosa cercare, poi con cosa sostituirlo, e per ogni occorrenza chiede conferma (A per sostituirle tutte). Dentro la finestra di ricerca, Alt+C e Alt+R cambiano il tipo di ricerca.

Esempio 5: tagliare, copiare e incollare righe

Ctrl+K        taglia la riga corrente (o la selezione)
Alt+6         copia la riga corrente (o la selezione)
Ctrl+U        incolla il testo tagliato o copiato
Alt+A         inizia/termina una selezione (poi frecce)
Ctrl+6        come Alt+A

Ctrl+K taglia un'intera riga e la mette negli appunti di nano; premendolo più volte di seguito si accumulano più righe. Ctrl+U le incolla dove si trova il cursore. Per una parte di riga o più righe si comincia una selezione con Alt+A, si estende con le frecce e poi si taglia (Ctrl+K) o si copia (Alt+6). Gli appunti funzionano solo dentro nano: per incollare da fuori, usa le scorciatoie del terminale (spesso Ctrl+Maiusc+V) o il tasto centrale del mouse.

Esempio 6: annullare, ripetere, commentare

Alt+U         annulla l'ultima modifica
Alt+E         ripete la modifica annullata
Alt+3         commenta / scommenta la riga (o le righe selezionate)
Ctrl+J        riformatta il paragrafo (giustifica)
Ctrl+R        inserisce nel testo il contenuto di un altro file

Alt+U e Alt+E sono l'annulla e il ripeti, possibili in sequenza più volte. Alt+3 mette o toglie il simbolo di commento (per esempio # in uno script o in un file di configurazione) alle righe selezionate: comodissimo per disattivare per prova un blocco di configurazione. Ctrl+R inserisce il contenuto di un altro file nel punto del cursore.

Esempio 7: modificare file di sistema

$ nano /etc/hosts
(modifica, poi Ctrl+O: errore di permesso)
$ sudo nano /etc/hosts
$ sudoedit /etc/hosts
$ SUDO_EDITOR=nano sudoedit /etc/hosts

I file in /etc appartengono a root: con un utente normale nano li apre ma non riesce a salvare (in basso compare un avviso: il file non è scrivibile). Si apre quindi con sudo nano. Meglio ancora sudoedit file (o sudo -e): modifica una copia temporanea con i tuoi privilegi e la sostituisce al file solo al salvataggio, evitando i problemi di sudo nano descritti più avanti. L'editor usato da sudoedit si sceglie con la variabile SUDO_EDITOR (o EDITOR).

Esempio 8: modificare un file di configurazione in sicurezza

$ sudo cp -a /etc/nginx/sites-available/miosito \
      /etc/nginx/sites-available/miosito.bak
$ sudo nano /etc/nginx/sites-available/miosito
$ sudo nginx -t
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo systemctl reload nginx

Un flusso prudente: si copia il file prima di toccarlo (con cp -a, che conserva permessi e date), si modifica, si verifica la sintassi con lo strumento del programma e solo dopo si ricarica il servizio con systemctl. Se qualcosa va storto, basta rimettere la copia al suo posto con mv.

Esempio 9: più file alla volta

$ nano indice.html stile.css
Alt+>        passa al file successivo
Alt+<        passa al file precedente
Ctrl+X       chiude il file corrente (poi chiede per gli altri)

Dando più nomi di file, nano li apre tutti, uno per volta, e si passa dall'uno all'altro con Alt+> e Alt+< (su alcune tastiere, Alt+. e Alt+,). Ogni Ctrl+X chiude il file in primo piano.

Esempio 10: le opzioni più utili all'avvio

$ nano -l script.sh
$ nano -w /etc/fstab
$ nano -B file.conf
$ nano -v /var/log/syslog
$ nano -m -l -i -E -T 4 script.py
$ nano +25,10 script.sh

-l mostra i numeri di riga; -w impedisce di spezzare le righe lunghe (importante nei file di configurazione, dove un a capo in più può cambiare il significato; nelle versioni recenti è il comportamento predefinito); -B crea una copia di sicurezza file.conf~ a ogni salvataggio; -v apre il file in sola lettura; -m abilita il mouse; -i mantiene l'indentazione; -E trasforma le tabulazioni in spazi e -T 4 imposta la larghezza della tabulazione. Con +25,10 si apre alla riga 25, colonna 10.

Esempio 11: rendere permanenti le impostazioni con ~/.nanorc

$ cat ~/.nanorc
set linenumbers
set tabsize 4
set tabstospaces
set autoindent
set mouse
include "/usr/share/nano/*.nanorc"

Invece di scrivere le opzioni ogni volta, si mettono nel file ~/.nanorc (senza il trattino e con set). L'ultima riga attiva l'evidenziazione della sintassi per i linguaggi e i formati supportati (HTML, shell, Python, nginx e molti altri). Le impostazioni valgono per il tuo utente: con sudo nano serve un file simile per root, o l'uso di sudoedit, che usa le tue.

Esempio 12: scegliere nano come editor predefinito

$ export EDITOR=nano
$ echo 'export EDITOR=nano' >> ~/.bashrc
$ select-editor
$ sudo update-alternatives --config editor
$ crontab -e

Molti comandi (crontab -e, visudo, git commit, sudoedit) aprono l'editor indicato dalla variabile EDITOR. Con export EDITOR=nano la si imposta per la sessione corrente, e aggiungendola a ~/.bashrc vale per le sessioni future. Su Debian e Ubuntu select-editor sceglie l'editor per l'utente, e update-alternatives quello di sistema. Se una volta ti ritrovi in un editor sconosciuto (spesso vim), l'uscita è Esc, poi :q! e Invio.

Esempio 13: leggere l'output di un comando e uso negli script

$ ps aux | nano -
$ journalctl -u nginx | nano -v -

#!/bin/bash
FILE="${1:?Indica il file da modificare}"
if [ -e "$FILE" ]; then
    cp -a "$FILE" "$FILE.bak.$(date +%F-%H%M)"
fi
nano "$FILE"

Con - come nome del file, nano legge dallo standard input: utile per guardare con calma l'output di un comando (con -v in sola lettura). Lo script mostrato crea una copia datata del file prima di aprirlo, con la stessa idea dell'esempio 8, e può essere usato con sudo davanti. Per il lavoro automatico nano non è adatto, perché è interattivo: per modificare file negli script servono sed, awk o tee.

Opzioni utili

  • +riga[,colonna]: apre il file a una riga precisa.
  • -l (--linenumbers): numeri di riga; -c: mostra sempre la posizione del cursore.
  • -w (--nowrap): non spezza le righe lunghe; -$ (--softwrap): le mostra su più righe senza modificarle.
  • -B (--backup): crea una copia di sicurezza a ogni salvataggio.
  • -v (--view): sola lettura; -m: mouse.
  • -i: indentazione automatica; -E: tabulazioni in spazi; -T n: larghezza della tabulazione.
  • -q: nessun segnale acustico; -x: nasconde la barra delle scorciatoie.
  • -: legge dallo standard input.
  • Ctrl+G dentro nano: guida completa con tutte le scorciatoie.

Attenzione a

  • Salva prima di uscire: Ctrl+O salva ma non esce, Ctrl+X esce. Per salvare e uscire: Ctrl+O, Invio, Ctrl+X; oppure Ctrl+X, S, Invio.
  • Non sei in sola lettura per caso: se un file di sistema si apre senza sudo, puoi scrivere ma non salvare, e perdi il lavoro se esci. Se vedi un avviso di sola lettura o di permessi, riapri il file con sudoedit.
  • sudo nano può creare file di root nella tua cartella: i file di cronologia o di configurazione di nano potrebbero ritrovarsi con proprietario root nella tua home. Con sudoedit il problema non esiste.
  • Righe lunghe e configurazioni: nelle versioni vecchie di nano, una riga lunga viene spezzata a capo e questo può rovinare un file di configurazione o un comando. Usa -w, o set nowrap in ~/.nanorc.
  • Tabulazioni e spazi: in file come i Makefile servono le tabulazioni, in YAML e in Python gli spazi. Se un file di configurazione "non funziona", controlla l'indentazione. In nano si possono rendere visibili gli spazi bianchi con Alt+P.
  • Incollare testo da fuori: con l'indentazione automatica (-i) un testo incollato può ritrovarsi con rientri crescenti. Disattiva l'opzione con Alt+I prima di incollare codice.
  • I tasti non rispondono: alcuni terminali e programmi di accesso remoto usano Alt per altre funzioni, e certe combinazioni non arrivano a nano. Se lo schermo sembra bloccato dopo un Ctrl+S (che in molti terminali sospende l'output), Ctrl+Q lo sblocca. In alternativa, Esc premuto e rilasciato prima del tasto vale come Alt.
  • File grandi: nano carica tutto il file in memoria, quindi con file di centinaia di megabyte (come i registri) è lento. Per leggere si usa less, per cercare grep.
  • Fine riga di Windows: un file con fine riga \r\n viene aperto da nano segnalando "DOS Format" in basso, e al salvataggio viene mantenuto. Per convertirlo: Alt+D mentre sei nella finestra di salvataggio, oppure sed -i 's/\r$//' file.
  • Un file che non finisce con un a capo: nano aggiunge per default una riga finale vuota quando salva. Per i file di configurazione è la scelta giusta; se serve evitarla, nano --nonewlines.
  • Non è per automatizzare: è interattivo, quindi non si usa in cron o negli script come strumento di modifica, se non per aprire un file a un utente.
  • Prima una copia, poi la modifica: per i file importanti (/etc/fstab, sshd_config, sudoers) tieni una copia e prova la nuova configurazione prima di chiudere la sessione da cui lavori. Per sudoers usa solo visudo, che controlla la sintassi prima di salvare.

Riepilogo

ScorciatoiaCosa fa
Ctrl+OSalva il file
Ctrl+XEsce (chiede se salvare)
Ctrl+WCerca
Alt+WOccorrenza successiva
Ctrl+\Cerca e sostituisce
Ctrl+KTaglia la riga
Alt+6Copia la riga
Ctrl+UIncolla
Alt+AInizia la selezione
Alt+U / Alt+EAnnulla / ripeti
Alt+3Commenta o scommenta
Ctrl+_Va a una riga
Ctrl+CMostra la posizione
Ctrl+RInserisce un altro file
Ctrl+GGuida