Создадим файл с табуляцией:

echo -e "\t1\n         2" | unexpand -t8 > 1.txt

Получим в 1.txt:

<------>1
<------> 2

Где <------> - 1 таб.

Приведем indent к одному виду - пробелам, где 1 таб равен 8 пробелам:

expand -t8 1.txt > 2.txt

Получим в 2.txt:

        1
         2

Получаем некий аналог dos2unix и unix2dos, только для табов и пробелов.

Теперь о применении такого на практике, до недавнего времени я тоже не знал разницу между indentation и alignment. Приведу примеры о чем идет речь.

Это — indentation:

for (int i = 0; i < 10; i++) {
    if (a[i] == 0) {
        do_something(i);
    }
}

А вот это — alignment:

int some_variable = 0;
int v1            = 0;

Соль в том, что indentation не поплывет в разных редакторах, с разными размерами таба, а вот alignment с табами поплывет 100%.

Следовательно, если хотим использовать табы, используем только в indentation, но alignment делаем исключительно пробелами. В таком случае использовать expand и unexpand нужно с особой осторожностью, чтобы не задеть aligement.


Ссылки по теме:

  1. Пора завязывать использовать пробелы вместо табуляции в коде
  2. Примиряем любителей пробелов и табов

Comments

comments powered by Disqus