Debata o používání tabulátorů a mezer v programování je nekonečná.
I když možná dáváte přednost neustálému používání tabulátorů, je pravděpodobné, že vaše pokyny pro kódování doporučují používat mezery.
Ale pokud jste již ve svém programu použili tabulátory všude a potřebujete tyto tabulátory převést na mezery, aby recenzent povolil váš kód, jste na správném místě.
V tomto tutoriálu vám ukážu, jak převést tabulátory na mezery v textovém souboru v příkazovém řádku Linuxu.
Použití příkazu expand k převodu tabulátorů na mezery v příkazovém řádku Linuxu
Používám tento ukázkový textový soubor, což je jednoduchý program C++ pro kontrolu lichých a sudých čísel. Toto je obsah souboru:
Tento soubor si můžete stáhnout odtud, pokud si chcete tento příkaz procvičit při sledování tohoto návodu.
Zkontrolujte, zda váš textový soubor obsahuje karty
Existuje několik způsobů, jak to udělat. Nejjednodušší metodou, kterou najdu, je použití příkazu cat.
Můžete použít příkaz cat s volbou -T a zobrazí všechny karty jako ^I na obrazovce (stdout).
cat -T tab_file
Umístění karet můžete vidět v souboru.
#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;
}
Převést tabulátory na mezery pomocí příkazu expand
Pokud na soubor použijete příkaz expand, převede všechny karty na blok po 8 mezerách a zobrazí výstup na obrazovce.
expand tab_file
Ale to není moc pohodlné, že? Změny zde téměř neuvidíte. Lepší nápad by bylo uložit výstup do jiného souboru.
expand tab_file > space_file
Pokud nyní soubor uvidíte pomocí příkazu cat, nenajdete již žádné karty.
Snižte počet mezer
Jak jsem zmínil v předchozí části, ve výchozím nastavení je tabulátor roven 8 mezerám. To by vypadalo super divně, kdyby váš kód měl tak velké odsazení.
Dobrá věc je, že můžete změnit výchozí velikost prostoru pomocí volby -t.
expand -t N tab_file
Pokud například musíte změnit každou kartu na 2 mezery, můžete použít příkaz expand takto:
expand -t2 tab_file > space_file
Převést pouze úvodní tabulátory na mezery
V programech byste často chtěli převést pouze úvodní karty, tj. karty na začátku řádku. Nechcete se dotknout tabulátorů mezi řádky, které jsou ve skutečnosti součástí kódu.
Rozbalit poskytuje také tuto možnost. Pokud chcete převést pouze úvodní tabulátory na mezery, použijte možnost –i .
Pokud budeme pokračovat v předchozím příkladu, zde je, jak by příkaz vypadal:
expand -t2 -i tab_file > space_file
Převést tabulátory na mezery a uložit je do původního souboru
Ve všech výše uvedených příkladech jste uložili převedený soubor do nového souboru. Ale pokud je vaším cílem vyčistit kód převedením tabulátorů na mezery existujících programových souborů, budete chtít, aby byl výstup uložen do samotného původního souboru.
K tomu můžete použít příkaz houba. Houbička „nasákne“ celý standardní vstup, než jej zapíše na výstup. To je mimořádně užitečné, když se pokoušíte změnit a uložit stejný soubor.
Nyní nemusí být příkaz houba ve vašem systému dostupný. Budete muset nainstalovat balíček moreutils. Mělo by být k dispozici
V distribucích založených na Ubuntu/Debianu můžete použít tento příkaz k instalaci moreutils:
sudo apt install moreutils
Po instalaci jej můžete použít v následující funkci:
expand -t2 -i tab_file | sponge tab_file
Převést tabulátory na mezery ve všech odpovídajících souborech v adresáři
Doposud to, co jste se naučili, platilo pro jeden soubor. Ale pokud máte projekt, který má několik programových souborů a chcete převést tabulátory na mezery ve všech z nich, budete muset být trochu chytřejší.
To, co jsme se dosud naučili, lze kombinovat s úžasnými příkazy find a exec.
find . -name '*.cpp' -type f -exec bash -c 'expand -t 4 "$0" | sponge "$0"' {} \;
Výše uvedený příkaz najde všechny soubory končící příponou cpp, předá tyto soubory příkazu expand a příkaz expand zapíše výstup do původních souborů pomocí příkazu sponge.
Možná si myslíte, že použití příkazu sed by v tuto chvíli bylo jednodušší, ale je to čistě vaše volba.