Il meccanismo
Cosa succede quando lanci Sostituisci nei file.
Trova ▸ Sostituisci nei file percorre la cartella aperta, decide quali file sono candidati, e riscrive solo quelli che corrispondono davvero. Ogni passaggio esiste per evitare un modo preciso in cui una sostituzione su una cartella va storta.
01Ogni file mantiene la sua codifica
Il file viene decodificato con la codifica in cui era conservato, la sostituzione si applica al testo, e viene riscritto con quella stessa codifica e i suoi fine riga originali. Nulla viene normalizzato lungo il percorso.
02I fine riga sopravvivono al viaggio
I file CRLF e CR vengono normalizzati in LF *in memoria*, perché un modello che attraversa un a capo si comporti allo stesso modo ovunque, poi riscritti con i fine riga che il file aveva all’arrivo.
03L’output di compilazione viene saltato, non cercato
.git, .svn, node_modules, .build, build, DerivedData, .venv e __pycache__ vengono saltati in blocco — l’enumeratore non ci entra, quindi un’occorrenza dentro node_modules non può essere riscritta per sbaglio.
04I binari vengono riconosciuti e lasciati stare
Un byte NUL in qualsiasi punto del primo kilobyte di un file è il segnale classico, e ogni file che ne contiene uno viene saltato prima che una regex lo sfiori.
05I file che hai aperto non vengono mai sovrascritti
I buffer già aperti nell’editor sono esclusi dal percorso, quindi una sostituzione su una cartella non può buttare via in silenzio modifiche non salvate in una scheda dietro la finestra.
06I percorsi vengono normalizzati prima del confronto
L’enumerazione delle cartelle restituisce /private/var mentre un URL costruito a mano dice /var. Senza appianare quella differenza, la protezione « salta questo file aperto » sembrerebbe funzionare senza fare nulla.