У меня есть два ответа.Во-первых, чтобы ответить на ваш конкретный вопрос, я бы использовал perl
или подобное, например:
replace-tab-indents.pl
#!/usr/bin/perl
while ($line = <STDIN>) {
while ($line =~ /^ *\t/) {
$line =~ s/^( *)\t/$1 /;
}
print(STDOUT $line);
}
Thisимеет дело с только табуляциями в начале строки .Это очень важно для вашего варианта использования, потому что вы не хотите заменять другие вкладки;например, те, которые являются частью некоторой статической строки в коде.
Используйте это внутри сценария оболочки, например:
for FILE in `find . -name *.cpp`; do
mv -i "$FILE" "$FILE.bak"
cat "$FILE.bak" | replace-tab-indents.pl > "$FILE"
done
Использование опции -name
в find
ограничивает вас только вашими исходными файлами, избегая проблем, которые вы правильно опасаетесь, связанных с заменой всех вкладок во всех файлах - во многих не исходных файлах байт «TAB» имеет решающее значение для данных, которые содержат этот файл.
Мой второй ответ - просто поменять их по ходу, а не все сразу.
Таким образом, вы можете использовать emacs (или vim, или любой современный редактор).действительно), который будет более проверенным, проверенным и надежным подходом.
Файлы прекрасно компилируются с помощью TAB, поэтому до тех пор, пока вам не понадобится редактировать данный файл, наличие отступа TABне влияет на вас;ровно в тот момент, когда он влияет на вас (т. е. при первом редактировании), вы можете использовать редактор для повторного отступа пробелов.Короче говоря, мой совет здесь заключается в том, чтобы выполнить это точно в срок / по ходу дела, а не все сразу.
Иначе говоря, компилятор не заботится об отступе, только выделать;и единственный раз, когда вы будете заботиться, это когда вы на самом деле редактируете данный исходный файл;таким образом, нет никакой эмпирической выгоды от повторного отступа ваших исходных файлов en mass .