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
.