Страницы

Поиск по вопросам

понедельник, 9 декабря 2019 г.

Как пакетно конвертировать пробелы в отступы в Sublime Text 3

#регулярные_выражения #sublime_text_3


Как без ущерба проекту пакетно заменить пробелы на табы? Я имею ввиду, чтобы не открывать
каждый файл, если файлов больше тысячи, — замучаться можно, — а сделать это массово.

UPD. Саша, спасибо большое за ссылки, думаю, одна из них приблизила меня к цели.
:) Только когда я вписываю в поиск Find: {4}, ST3 пишет, что ничего не найдено. К сожалению,
Windows у меня действительно нет под рукой. Ещё не совсем понимаю смысл вот этой фразы: 


  As mentioned in comments to match spaces at the start of a line you
  can use the regexp ^( {4})+


UPD. 2 Большое Вам спасибо! Действительно, всё получилось, вот только проблема в
том, что ST3 открыл все файлы, и каждый приходится сохранять. Можно ли как-то сделать,
чтобы он сам всё сохранил и закрыл? Или, может, существует другое, альтернативное решение?
    


Ответы

Ответ 1



В основном меню: View - Indentaion На оффсайте можно почитать подробности: Indentation Settings

Ответ 2



В unix-подобных системах существует утилита unexpand. Для обработки группы файлов можно написать простенький скрипт на bash: find . -name '*.[ch]' -exec sh -c 'unexpand {} > tmp.~ && mv tmp.~ {}' \; expand делает обратную замену.

Ответ 3



Ctrl + Shift + F: Напротив Find: вставляем регулярное выражение ^ {4}, где 4 — количество пробелов, которые мы заменяем отступом. По умолчанию — 4, если прежде не меняли никаких настроек индентации, оставляйте ^ {4}. Регулярные выражения должны быть включены самой левой кнопкой консоли «Find in files» (той, которую мы вызвали шорткатом Ctrl + Shift + F). Напротив Where: нажимаем на кнопку ... → Add Folder → выбираем папку проекта. Если проект очень большой на тысячи файлов, рекомендовал бы производить замену по частям, ибо при работе с огромными массивами Sublime Text 3 имеет свойство подвисать. Напротив Replace: вставляем \t — метасимвол табуляции. Получается так: Жмём на Replace → файлы, в которых произведена замена, откроются в новых вкладках, → в верхнем меню кликаем File → Save All. Замена произведена. File → Close All Files — все вкладки закроются. Для тех, кто пакетно работает с множеством файлов, не покажется лишним плагин TabExtra, добавляющий новые возможности при работе с вкладками. Положим, в нашем примере мы сделали массовую замену, но где-то опечатались в синтаксисе регулярных выражений, из-за чего получилось не то, что требовалось. Кликаем правой кнопкой мыши по любой вкладке → Close Tab(s): Dismiss Unsaved → Close All Tabs → все вкладки закроются без сохранения. На английском Stack Overflow рекомендуют использовать шаблон ^( {4})+. Однако если Ваш код отформатирован каким-нибудь Beautifier'ом, то оформление может испортиться, и придётся форматировать заново. Пример применения моего регулярного выражения: Пример применения регулярного выражения, рекомендованного на англоязычном Stack Overflow: Разберём модель ^( {4})+: ^ — метасимвол начала строки. Если его не использовать, в отступы отконвертируются пробелы, стоящие не только в начале строки, но и в любом другом месте текста. ( {4}) — пробел, повторённый 4 раза. Эквивалентно ( ). + — квантор, означающий повторение выражения в скобках 1 или более раз. Другими словами 4, 8, 12 и другие кратные четырём количества пробелов подряд заменятся на один отступ. Код может выстроиться в один столбец как на примере. Если не желаете терять оформление, используйте регулярное выражение ^ {4}. Чтобы проблемы с табами/пробелами в дальнейшем не беспокоили, в какой бы операционной системе и IDE/редакторе ни работали разработчики проекта, сейчас повсеместно для каждого мало-мальски используемого редактора или IDE применяется плагин EditorConfig. После установки через PackageControl в папке проекта создаём файл .editorconfig, куда вставляем следующий текст: # editorconfig.org root = true [*] indent_style = tab indent_size = 4 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.md] trim_trailing_whitespace = false У всех файлов проекта будет автоматически настраиваться Tab_Size:4, пусть вы поставили или редактор определил («умное» автоопределение можно отключить в открывающийся после Preferences → Settings - User файл, добавив в него строку "detect indentation": false, однако Sublime Text 3 всё равно порой устанавливает индентацию по-своему) иначе. Представлены значения по умолчанию, можете менять их по своему усмотрению, подробности в статье на Хабрахабре. Поддерживаемые настройки для Sublime Text.

Комментариев нет:

Отправить комментарий