Простое решение проблемы смешанного форматирования
В программировании использование табуляции для создания отступов и форматирования исходного кода является темой для непрекращающихся дискуссий. Некоторые программисты полагают, что использование 8 пробелов для представления одного символа табуляции слишком много, мотивируя это тем, что просмотр кода с большим уровнем вложенности (и, как следствие, с большими отступами) затруднён. Программисты, предпочитающие использовать табуляцию, отвечают тем, что код с большим уровнем вложенности неудачен сам по себе.
Есть много аргументов как за использование табуляции, так и против. Тем не менее, при использовании табуляции возникают проблемы, если у человека, редактирующего впоследствии код, редактор сконфигурирован расширять табуляцию другим количеством пробелов. В результате в некоторых строках для отступах будет использоваться табуляция, в некоторых — пробелы или смесь из пробелов и табуляции. При просмотре в другом редакторе такой код может выглядеть просто ужасно.
К счастью, в Linux проблема решается очень просто (причем как для замены табуляции пробелами, так и наоборот).
Рассмотрим два случая. В обоих случаях будем полагать, что нам нужно произвести глобальную замену во всех файлах с расширением PHP.
Случай 1. Замена табуляций на пробелы.
Расширение табуляции до четырёх пробелов:
Расширение табуляции до восьми пробелов:
Расширение табуляции до восьми пробелов, не затрагивая символы табуляции, находящиеся после пробелов:
Случай 2. Замена пробелов на табуляцию.
Установка размера табуляции в 8 пробелов
Установка размера табуляции в 4 пробела
Установка размера табуляции в 4 пробела с заменой только начальных пробелов
Кстати, очень интересно замечание Линуса Торвальдса:
Tabs are 8 characters, and thus indentations are also 8 characters. There are heretic movements that try to make indentations 4 (or even 2!) characters deep, and that is akin to trying to define the value of PI to be 3.
К табуляции не относится, но всё равно красивая магия с командной строкой: “глобальное” редактирование файлов: убираем строку
define ('EM_TOPADMIN', false);
из всех файловwp-config.php
:Что примечательно, так работать не будет:
Эти комманды не работают! В них expand и cat одновременно читают и пишут в один файл.
Mike, Вы не поверите, но они работают. Точнее, работает только первый вариант. Вспомните, как работает pipeline в bash: стандартный вывод первой команды подается на стандартный ввод для второй через pipe; при этом соединение осуществляется до перенаправления ввода-вывода. Грубо говоря, работать это будет следующим образом:
echo -e "$DATA" > myfile
Тогда я не понимаю, почему следующая команда оставила в моем проекте половину пустых файлов.
find . -name “*.java” -type f -print0 | xargs -0 -I {} sh -c ‘expand -t 4 “{}” | cat > “{}”‘
При сохранении во временный файл все заработало
find . -name “*.java” -type f -print0 | xargs -0 -I {} sh -c ‘expand -t 4 “{}” > /tmp/f && cat /tmp/f > “{}”‘