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
) він лише замінює перший пробіл у кожному рядку на вкладку і залишає решту з них.