Coppie automatiche e rientro intelligente¶
Mentre digiti, l'editor chiude per te parentesi e virgolette, mantiene il tuo rientro sulle righe nuove, apre i blocchi tra graffe e applica un'unica unità di rientro coerente (tabulazioni o spazi) al tasto Tab, al backspace che riduce il rientro e al rientro automatico. Tutto ciò che c'è qui è una funzionalità integrata dell'editor; i corrispondenti comandi di menu e l'impostazione dello stile di rientro arrivano dal plugin Rientro incluso.
È pensato per essere invisibile: agisce solo sul carattere che hai appena digitato e si fa da parte dove darebbe fastidio (dentro commenti e stringhe, davanti a parole esistenti, con il carattere compagno sbagliato).
Accoppiare automaticamente parentesi e virgolette¶
Digitare una parentesi o una virgoletta di apertura inserisce la compagna e lascia il cursore in mezzo:
| Digiti | Ottieni | Cursore |
|---|---|---|
( |
() |
in mezzo |
[ |
[] |
in mezzo |
{ |
{} |
in mezzo |
" |
"" |
in mezzo |
' |
'' |
in mezzo |
Alcune regole evitano che diventi fastidioso:
- Digitare sopra. Digitare un carattere di chiusura quando lo stesso
carattere è già a destra del cursore lo scavalca invece di inserirne un secondo,
quindi digitare di seguito attraverso
()o""lascia un'unica coppia equilibrata. - Niente accoppiamento davanti a una parola. Un carattere di apertura viene
completato solo quando il carattere seguente è uno spazio bianco, una chiusura o la
fine della riga, quindi aggiungere
(appena prima di un testo esistente non vi infila una)vagante in mezzo. - Virgolette consapevoli dell'apostrofo. Una
'digitata subito dopo una lettera (come indon't) viene trattata come apostrofo e non viene accoppiata. Le virgolette si accoppiano automaticamente solo in un contesto neutro (inizio di un token, dopo uno spazio bianco o un operatore). - Parentesi angolari solo nel markup.
<…>si accoppiano automaticamente solo nei documenti HTML/XML, dove<apre un tag. Ovunque altrove<è un operatore di confronto o di scorrimento e viene lasciato in pace.
Racchiudere una selezione (digita per racchiudere)¶
Con del testo selezionato, digitare un carattere di apertura non sostituisce la selezione: la racchiude.
- Funziona con
([{"'(non con<: fuori dal markup è un operatore). - Il testo interno resta selezionato dopo, quindi i racchiudimenti si
concatenano: digita
(e poi"e ottieni("value"). - Con più cursori, ogni selezione viene racchiusa in modo indipendente, e l'intera operazione è un solo passo di annullamento.
Cancellare una coppia¶
Premere Backspace con il cursore tra una coppia vuota inserita automaticamente
((|), [|], {|}, "|", '|' o <|> nel markup) cancella entrambi i
caratteri in un colpo solo, così puoi annullare una coppia automatica con un'unica
pressione. Appena c'è del contenuto tra la coppia, Backspace si comporta
normalmente.
Rientro intelligente con Invio¶
Premere Invio porta lo spazio bianco iniziale della riga corrente sulla riga nuova, così resti alla stessa profondità senza ridigitare tabulazioni o spazi:
- Mantieni il rientro. La riga nuova inizia con lo stesso rientro della riga che hai lasciato.
- Apri un livello. Se la riga che hai lasciato termina con un carattere di
apertura (
{,[,(), la riga nuova riceve un livello di rientro in più. - Apri un blocco. Se il cursore si trova tra un carattere di apertura e la sua chiusura corrispondente, il blocco si apre: la riga nuova riceve un livello di rientro in più e la chiusura scende su una riga propria, alla profondità dell'apertura.
Stile di rientro — tabulazioni, spazi o automatico¶
Un'unica unità di rientro guida il tasto Tab, il backspace che riduce il rientro e il rientro automatico di cui sopra, così sono sempre d'accordo. Scegliila in Preferenze ▸ Estensioni ▸ Rientro:
| Stile | Comportamento |
|---|---|
| Tabulazioni (predefinito per i file nuovi) | Un livello è un vero carattere di tabulazione; Spazi per rientro ne imposta la larghezza visiva. |
| Spazi | Un livello sono tanti spazi quanti ne indica Spazi per rientro. |
| Automatico (rileva dal documento) | L'editor esamina il rientro esistente del documento e lo segue: un file rientrato con tabulazioni continua a usare tabulazioni, uno da 2 spazi continua a usare due spazi. Un file che non ha ancora rientro ricade sul valore predefinito (tabulazioni). |
I file nuovi, senza titolo, usano per impostazione predefinita Tabulazioni, larghezza 4.
Regolare il rientro a mano¶
Il plugin Rientro aggiunge due comandi (anche sotto Modifica ▸ Rientro) che aumentano o riducono il rientro di ogni riga toccata dalla selezione, o della riga del cursore quando non c'è nulla di selezionato:
| Comando | Scorciatoia |
|---|---|
| Aumenta il rientro | Ctrl+] |
| Riduci il rientro | Ctrl+[ |
Incollare un blocco di codice¶
Copia alcune righe che portano il proprio rientro —diciamo tre righe che iniziano ciascuna con dodici spazi— e incollale con il cursore rientrato. Incollate alla lettera, la prima riga finirebbe nel tuo rientro più i dodici spazi del blocco (molto a destra) e ogni riga successiva alla colonna 0 più dodici, lasciandoti a rientrare tutto di nuovo a mano.
OctoEdit rientra il blocco al posto tuo: il rientro condiviso dalle righe del blocco viene rimosso, la prima riga finisce dove il cursore è già, e ogni riga successiva riceve il rientro della riga del cursore più il rientro che aveva dentro il blocco. La struttura interna del blocco viene mantenuta esattamente; le tabulazioni restano tabulazioni e gli spazi restano spazi.
Viene sostituito solo il rientro iniziale: il blocco conserva i propri caratteri di rientro, quindi un blocco rientrato con spazi incollato in un documento rientrato con tabulazioni resta rientrato con spazi al suo interno. Convertire il rientro interno del blocco allo stile del documento è una possibile opzione futura: oggi l'editor non lo fa.
Questo vale solo per un incollaggio che sia inequivocabilmente un blocco:
- gli appunti contengono più di una riga;
- c'è un solo cursore e nessuna selezione rettangolare (per colonne);
- tra l'inizio della riga e il cursore non c'è altro che spazio bianco — incollare in mezzo a una riga è un innesto, e viene lasciato alla lettera.
Tutto il resto si incolla esattamente come prima. L'intero incollaggio è un unico passo di Annulla, e una selezione viene sostituita come di consueto.
Disattivalo con Applica di nuovo il rientro alle righe incollate in base al rientro del cursore in Preferenze ▸ Estensioni ▸ Rientro (attivo per impostazione predefinita).
Incolla come Markdown (Ctrl+Shift+V) segue la stessa regola. Il testo
convertito è un blocco che inizia alla colonna 0, con gli elementi di elenco
annidati rientrati rispetto a esso, quindi con il cursore rientrato ogni riga
riceve il rientro del cursore e l'annidamento viene mantenuto esattamente.
Vedi Modificare per sapere cosa fa il
comando.
Valori predefiniti per linguaggio¶
Alcuni linguaggi hanno una convenzione di rientro quasi universale, e l'editor la porta come valore predefinito di quel linguaggio: un file di quel tipo appena aperto si rientra correttamente senza alcuna configurazione.
| Linguaggio | Predefinito |
|---|---|
| Python | 4 spazi (PEP 8) |
| Rust | 4 spazi (rustfmt) |
| Markdown | 4 spazi (elenchi annidati) |
| YAML | 2 spazi (le tabulazioni non sono ammesse) |
| JSON | 2 spazi |
| Go | tabulazioni (gofmt) |
| C / C++ | tabulazioni |
Tutti gli altri linguaggi deliberatamente non portano alcun valore predefinito e seguono la tua impostazione globale di rientro. Cambiare a mano il linguaggio di un documento (il menu Linguaggio) riapplica subito il valore predefinito corrispondente.
Il valore predefinito vive nel file di definizione del linguaggio
(colorizers/<id>.json, chiave
"indent": { "style": "tabs|spaces", "width": N }). Un utente esperto può cambiare
un valore predefinito di serie mettendo una copia modificata di quel file nella
cartella di sostituzioni dell'utente: il catalogo sostituisce le definizioni per
identificatore.
Previsto: sostituzioni per linguaggio nelle Preferenze
Una tabella di impostazioni per sostituire questi valori predefiniti per linguaggio (senza toccare alcun JSON) è progettata e pianificata come passo successivo di questa funzionalità; finché non arriva, la sostituzione via JSON di cui sopra e gli strati sottostanti sono i modi per guidare il rientro.
Da dove arriva l'unità di rientro (precedenza)¶
Quando più fonti hanno un'opinione sul rientro, l'editor le risolve in un unico punto e applica la vincente, dalla precedenza più alta alla più bassa:
- Il
.editorconfigdel progetto — quando è presente e «Applica le impostazioni di .editorconfig» è attivo, gliindent_style/indent_size/tab_widthdi un progetto vincono per i file corrispondenti. - Il valore predefinito di serie del linguaggio — la tabella qui sopra, quando il linguaggio del documento ne dichiara uno.
- La tua impostazione globale di rientro — la scelta Tabulazioni / Spazi / Automatico di cui sopra.
Così un progetto che porta un .editorconfig sostituisce tutto per i file di quel
progetto; un file Python fuori da un progetto del genere si rientra con gli spazi del
PEP 8 anche se la tua impostazione globale sono le tabulazioni; e tutto il resto segue
la tua impostazione globale. Puoi sempre cambiare a mano il rientro di un documento
dopo.
La precedenza vale nel momento in cui qualcosa cambia: applicare una scelta diversa
di Tabulazioni / Spazi / Automatico nelle Preferenze risolve di nuovo subito il
documento aperto, così un file governato da un .editorconfig o da un valore
predefinito di linguaggio mantiene il suo rientro senza che tu debba cambiare scheda.
Più cursori¶
Tutto quanto sopra vale in ogni cursore quando modifichi con
più cursori: digitare ( inserisce () in ciascuno, Invio
mantiene il rientro di ogni riga, e Backspace tra coppie vuote cancella entrambe le
celle in ciascuno. Un solo Annulla ritira l'intera modifica con più cursori in un
colpo.
Backspace con cursori misti
Backspace cancella le coppie solo quando ogni cursore si trova tra una coppia vuota. Se alcuni cursori sono altrove, Backspace ricade sul comportamento normale in tutti quanti, così non cancella mai una chiusura vagante in un cursore mentre modifichi una parola in un altro.
In commenti e stringhe¶
Quando un colorizzatore di sintassi è attivo, l'accoppiamento automatico e
l'apertura di blocco guidata dalle graffe si fanno da parte dentro i commenti e i
letterali di stringa e di carattere: lì una { o una " sono testo comune, non
codice, quindi l'editor le lascia esattamente come le hai digitate. Il rientro
semplice (portare lo spazio bianco della riga precedente) continua a funzionare. In
un documento di testo semplice senza colorizzatore non c'è nulla da sopprimere,
quindi l'accoppiamento si comporta allo stesso modo ovunque.
Correlati¶
- Plugin Rientro — l'impostazione dello stile di rientro e i comandi Aumenta/Riduci.
- EditorConfig — rientro per progetto che sostituisce la tua impostazione globale.
- Modifica con più cursori — posizionare più cursori e modificare con essi insieme.