Il dibattito sull'uso di tab e spazi nella programmazione è senza fine.
Sebbene tu preferisca utilizzare sempre le schede, è probabile che le tue linee guida di codifica suggeriscano l'utilizzo di spazi.
Ma se hai già utilizzato le schede ovunque nel tuo programma e devi convertire quelle schede in spazi in modo che il revisore consenta il tuo codice, sei nel posto giusto.
In questo tutorial, ti mostrerò come convertire le schede in spazi in un file di testo nella riga di comando di Linux.
Utilizzo del comando expand per convertire le schede in spazi nella riga di comando di Linux
Sto usando questo file di testo di esempio che è un semplice programma C++ per controllare i numeri pari e dispari. Questo è il contenuto del file:
Puoi scaricare questo file da qui se vuoi esercitarti con il comando mentre segui questo tutorial.
Verifica se il tuo file di testo ha delle schede
Ci sono diversi modi per farlo. Il metodo più semplice che trovo è usare il comando cat.
Puoi usare il comando cat con l'opzione -T e visualizzerai tutte le schede come ^I sullo schermo (stdout).
cat -T tab_file
Puoi vedere la posizione delle schede nel file.
#include
using namespace std;
int main()
{
^Iint n;
^Icout << “Enter a number:^I“;
^Icin >> n;
^I
^Iif (n%2 == 0) {
^I^Icout<<n<< “is an even Number”;
^I}
^Ielse
^I^Icout<<n<< “is an odd Number”;
^Ireturn 0;
}
Converti le schede in spazi con il comando espandi
Se usi il comando di espansione su un file, convertirà tutte le schede in un blocco di 8 spazi e visualizzerà l'output sullo schermo.
expand tab_file
Ma non è molto conveniente, vero? Difficilmente vedrai i cambiamenti qui. Un'idea migliore sarebbe quella di salvare l'output in un altro file.
expand tab_file > space_file
Ora se vedi il file usando il comando cat, non troverai più nessuna scheda.
Riduci il numero di spazi
Come accennato nella sezione precedente, per impostazione predefinita, una scheda è uguale a 8 spazi. Sembrerebbe super strano se il tuo codice ha un'indentazione così grande.
La cosa buona è che puoi cambiare la dimensione dello spazio predefinita con l'opzione -t.
expand -t N tab_file
Ad esempio, se devi modificare ciascuna scheda in 2 spazi, puoi utilizzare il comando di espansione in questo modo:
expand -t2 tab_file > space_file
Converti solo le tabulazioni iniziali in spazi
Spesso nei programmi, vorresti solo convertire le schede iniziali, ovvero le schede all'inizio della riga. Non vuoi toccare le schede tra le righe che fanno effettivamente parte del codice.
Espandi fornisce anche questa opzione. Se desideri convertire solo le schede iniziali in spazi, utilizza l'opzione –i .
Se continuiamo con l'esempio precedente, ecco come sarebbe il comando:
expand -t2 -i tab_file > space_file
Converti le schede in spazi e salvalo nel file originale
In tutti gli esempi precedenti, hai salvato il file convertito in un nuovo file. Ma se il tuo obiettivo è pulire il tuo codice convertendo le schede negli spazi dei file di programma esistenti, vorresti che l'output fosse salvato nel file originale stesso.
Per farlo, puoi usare il comando spugna. La spugna "assorbe" l'intero input standard prima di scriverlo in output. Questo è estremamente utile quando stai cercando di modificare e salvare lo stesso file.
Ora, il comando sponge potrebbe non essere disponibile sul tuo sistema. Dovrai installare il pacchetto moreutils. Dovrebbe essere disponibile
Sulle distribuzioni basate su Ubuntu/Debian, puoi usare questo comando per installare moreutils:
sudo apt install moreutils
Una volta installato, puoi usarlo nella seguente funzione:
expand -t2 -i tab_file | sponge tab_file
Converti le schede in spazi in tutti i file corrispondenti in una directory
Finora tutto ciò che hai appreso era applicabile a un singolo file. Ma se hai un progetto che ha diversi file di programma e vuoi convertire le schede in spazi in tutti loro, dovrai essere un po' più intelligente qui.
Ciò che abbiamo imparato finora può essere combinato con i magnifici comandi find ed exec.
find . -name '*.cpp' -type f -exec bash -c 'expand -t 4 "$0" | sponge "$0"' {} \;
Il comando precedente trova tutti i file che terminano con estensione cpp, passa questi file al comando expand e il comando expand scrive l'output nei file originali con l'aiuto del comando sponge.
Potresti pensare che usare il comando sed sarebbe stato più facile a questo punto, ma è tutta una tua scelta.