Можно ли конвертировать вкладки в пробелы, сохраняя выравнивание текста?
Простая замена работает только тогда, когда нет ведущих символов.
indentation
tab-characters
ideasman42
источник
источник
:h vim-faq
и искать/tab characters
. Трудно запомнить тег:h faq-14.16
.Ответы:
Вы можете использовать
:retab
команду. Из:help :retab
Обратите внимание, что команда принимает диапазон, поэтому вы можете сделать визуальный выбор, а затем только
:retab
выделенные строки.источник
Вы можете использовать
:retab
, как указано, однако, это изменит все вкладки на пробелы, а не только вкладки в начале строкиТак вот (где
⇥
находится символ табуляции):изменяется на (где
␣
символ пробела):Это может привести к неожиданным побочным эффектам в некоторых сценариях, и это еще больше проблема при переходе пробелов на вкладки!
Итак, я написал небольшую функцию для изменения только табуляции / пробелов в начале строки:
В этой версии вы должны вручную указывать
expandtab
в вызове функции (т.:call Retab(1)
Е. Менять табуляцию на пробелы), но вы также можете изменить ее так, чтобы она принимала текущее значение&expandtab
(как это уже было с&tabstop
), как это:retab
делается. (Я предпочитаю указать это вручную).источник
a
вif a:expandtab
среднем?set expandtab
.vimrc, а затемautocmd BufWritePre * :call Retab(&expandtab)
- отступ будет заменен на табуляцию, а не на пробел.Vim предоставляет
!retab
команду, которая заменит все последовательности<Tab>
новыми строками пробела, используя новое заданное:set tabstop=2
значение tabstop (например ), но все вкладки внутри строк могут быть изменены (например, в программе на C, вы должны использовать,\t
чтобы избежать этого)!Таким образом, в качестве альтернативы вы можете изменить все вкладки на пробелы, используя следующую команду:
или как предложено @Shahbaz :
Таким образом, конвертируются только вкладки, используемые в отступе.
Объяснение:
%
представляет весь буфер / файл (:help :%
)s
обозначает замену (:help sub-replace-special
)\t
или^I
обозначает вкладку- используйте столько пробелов, сколько вам нужно на одной вкладке
g
- обозначает глобальный, и он будет преобразовывать несколько вкладок в одной строкеЗатем , чтобы исправить отступы весь файл, вы можете попробовать: gg=G. Проверьте: перезаписать плохо с отступом код для более подробной информации.
Чтобы использовать пробелы по умолчанию вместо вкладок, вам необходимо добавить следующие параметры в ваш
.vimrc
файл:Альтернативное решение заключается в использовании
tidy
Связанный:
источник
%s/^\t\+/ g
так, чтобы конвертировались только вкладки, используемые в отступе. Кроме того,gg=G
может быть катастрофическим с такими языками, как Python.Попробуйте использовать:
expand
это инструмент командной строки для преобразования вкладок в пробелы, которые вы можете запустить из оболочки или с помощью:!expand
.Он находится в POSIX, поэтому он должен быть доступен на большинстве систем.
unexpand
сделаем наоборот, кстати.источник
expand
?:%!expand -t 4
внутри Vim. Более того, вы также можете использовать текущий параметр ширины смещения::exe '%!expand -t ' . &shiftwidth
Для полноты
=
можно также использовать для исправления отступов после того, как вы указали, что вкладки заменяются пробелами. В обычном режиме вы можете сделать это, набрав:set expandtab
. Тогда=
может быть использовано двумя способами:=
исправляет отступы выбранных блоков кода.gg=G
исправляет весь файл, гдеgg
перемещает курсор в начало файла, затем=
применяется иG
перемещает курсор в конец файла.Ссылка: ссылка
источник