1 - Если у вас есть пробелы и вы хотите вкладки.
Во-первых, вам нужно решить, сколько пробелов будет иметь одну вкладку. Тем не менее, предположим, у вас есть строки с ведущими 4 пробелами, или 8 ... Чем вы понимаете, что вы, вероятно, хотите, чтобы табуляция была 4 пробелами. Теперь с этой информацией вы делаете:
:set ts=4
:set noet
:%retab!
Здесь есть проблема! Эта последовательность команд будет искать весь ваш текст, а не только пробелы в начале строки. Это означает, что строка, как: "Hey,␣this␣␣␣␣is␣4␣spaces"
станет "Hey,␣this⇥is␣4␣spaces"
, но это не так! это вкладка!
Чтобы решить эту маленькую проблему, я рекомендую search
вместо retab
.
:%s/^\(^I*\)␣␣␣␣/\1^I/g
Этот поиск будет искать во всем файле любые строки, начиная с любого количества вкладок, за которыми следуют 4 пробела, и заменять его на любое количество найденных вкладок плюс одну.
Это, к сожалению, не запустится сразу!
Сначала файл будет иметь строки, начинающиеся с пробелов. Затем поиск преобразует только первые 4 пробела в табуляцию, и позволяет следующее ...
Вам нужно повторить команду. Сколько раз? Пока не получишь pattern not found
. Я пока не могу придумать, как автоматизировать процесс. Но если вы делаете:
`10@:`
Вы, вероятно, сделали. Эта команда повторяет последний поиск / замену 10 раз. Вряд ли в вашей программе будет так много отступов. Если это так, просто повторите еще раз @@
.
Теперь просто для завершения ответа. Я знаю, что вы просили об обратном, но никогда не знаете, когда вам нужно что-то отменить.
2 - У вас есть вкладки и вы хотите пробелы.
Во-первых, решите, во сколько мест вы хотите конвертировать ваши вкладки. Допустим, вы хотите, чтобы каждая вкладка была 2 пробела. Затем вы делаете:
:set ts=2
:set et
:%retab!
Это будет иметь ту же проблему со строками. Но так как это лучший стиль программирования, позволяющий не использовать жесткие вкладки внутри строк, вы на самом деле делаете здесь что-то хорошее. Если вам действительно нужна вкладка внутри строки, используйте \t
.
sed "s/ +/`echo -e '\t'`/g" < input.py > output.py
) отображает все пробелы, а не только начальные пробелы. Во втором примере (sed "s/^ +/`echo -e '\t'`/g" < input.py > output.py
) он заменяет только первый пробел в каждой строке на вкладку и оставляет остальные из них.