Как исправить / конвертировать пробел в Sublime Text?


228

Пример: если у меня есть документ с двумя пробелами, и я хочу, чтобы у него был 4 пробела, как мне автоматически конвертировать его с помощью редактора Sublime Text?

Ответы:


525

Вот хитрый трюк в Sublime Text 2 или 3, чтобы преобразовать интервал отступа в документе.

TL; DR:

Преобразование из 2 пробелов в 4 пробела:

Убедитесь, что ширина вкладки установлена ​​на 2. Преобразуйте отступ с двумя пробелами в вкладки, переключитесь на ширину вкладки 4, а затем преобразуйте отступ в пробелы.

Подробное описание:

Перейти к:

View -> Indentation

Следует читать:

  • Indent using spaces [x]
  • Tab width: 2

Выбрать:

  • Convert Indentation to Tabs

Затем выберите:

  • Tab width: 4
  • Convert Indentation to Spaces

Готово.


5
Спасибо! : D сэкономил много времени. Заметка. Вы также можете сделать «найти: пробел => выбрать все => вкладка»
Automatico

11
Я создал Макрос для возвышенного, который делает все это для вас gist.github.com/joshmfrankel/5707020 . Наслаждайтесь :-)
Джош Франкель

2
Я хочу отметить, что «Преобразование отступов в пробелы» также работает, если у вас есть текстовый файл, в котором вкладки не занимают всю ширину вкладок. Скажем, для файла, в котором автор использовал вкладки для форматирования столбцов, поэтому, если бы вам пришлось искать и заменять вкладки, результирующие столбцы больше не были бы выстроены в ряд. Использование «Преобразовать отступы в пробелы» сохранит правильность
выравнивания,

Я также создал макросы и примеры сочетаний клавиш для этого коллеги, прежде чем увидел макрос Джоша. Мой использует ctrl + 2 и ctrl + 4, чтобы разрешить переключение назад и вперед: gist.github.com/beaugunderson/8588871
Бо

74

Я обнаружил, что для моего здравомыслия лучше, чтобы пользовательские настройки определялись так:

"translate_tabs_to_spaces": true,
"tab_size": 2,
"indent_to_bracket": true,
"detect_indentation": false

Это detect_indentation: falseособенно важно, так как это заставляет Sublime соблюдать эти настройки в каждом файле, в отличие от View -> Indentationнастроек.

Если вы хотите получить фантазию, вы также можете определить сочетание клавиш для автоматического повторного ввода кода (YMMV), вставив следующее в Sublime -> Preferences -> Key Binding - User:

[
  { "keys": ["ctrl+i"], "command": "reindent" }
]

и визуализировать пустое пространство:

"indent_guide_options": ["draw_active"],
"trim_trailing_white_space_on_save": true,
"ensure_newline_at_eof_on_save": true,
"draw_white_space": "all",
"rulers": [120],

9

Я нашел, на мой взгляд, более простое решение, чем Магне:

На Mac:

"cmd+f" => "  "(two spaces) => "alt+enter" => "arrow right" => "  "(two more spaces) => set tab width to 4(this can be done before or after.

На окнах или других платформах меняйте cmd+fи alt+enterкакими бы ни были ваши findи select allгорячие клавиши.

Примечание: этот метод подвержен ошибкам, если в вашем коде более одного пробела. Таким образом, он менее безопасен, чем метод Магне, но быстрее (по крайней мере, для меня).


Я не мог заставить это работать как таковой, но я использовал принцип и просто сделал поиск и замену (cmd-option-F на Mac) и заменил "" (4 пробела) на "" (2 пробела). И это сработало!
evanbikes

Я нашел другой способ сделать это сейчас, но это зависит от языка. Если у вас есть такой плагин для форматирования, как RubyFormatвы, вы можете просто установить желаемый размер вкладки и затем переформатировать код. В случае RubyFormatэтого было бы cmd+shift+R.
Автомат

7

Хотя многие предложения работают при конвертации 2 -> 4 пробелов. Я столкнулся с некоторыми проблемами при конвертации 4 -> 2.

Вот что я в итоге использовал:

Sublime Text 3/Packages/User/to-2.sublime-macro

[
  { "args": null, "command": "select_all" },
  { "args": { "set_translate_tabs": true }, "command": "unexpand_tabs" },
  { "args": { "setting": "tab_size", "value": 1 }, "command": "set_setting" },
  { "args": { "set_translate_tabs": true }, "command": "expand_tabs" },
  { "args": { "setting": "tab_size", "value": 2 }, "command": "set_setting" }
]

5

Если вы находите поиск и замену более быстрыми в использовании, вы можете использовать замену регулярного выражения следующим образом:

Найти (регулярное выражение): (^|\G) {2}(Вместо "{2}" <space>{2} вы можете просто написать два пробела. Используйте это здесь для ясности.)

Замените на 4 пробела, или как хотите, как \t.


5

Я написал плагин для него. Вы можете найти его здесь или найти «ReIndent» в управлении пакетами. Он в основном делает то же самое, что писал Кайл Финли, но в удобной форме с ярлыками для преобразования между 2 и 4 и наоборот.


2

Вы должны добавить этот код в свои пользовательские привязки клавиш:

{ "keys": ["ctrl+f12"], "command": "set_setting", "args": {"setting": "tab_size", "value": 4} }

нажав Ctrl + F12, он вернет ваш файл на размер вкладки 4. Если вы хотите другой размер вкладки, вы просто измените число «значение». Формат простой json.


Мне это нравится, спасибо! Я добавил 2 и 4, как это:{ "keys": ["ctrl+f10"], "command": "set_setting", "args": {"setting": "translate_tabs_to_spaces", "value": 2} }, { "keys": ["ctrl+f11"], "command": "set_setting", "args": {"setting": "tab_size", "value": 2} }, { "keys": ["ctrl+f12"], "command": "set_setting", "args": {"setting": "tab_size", "value": 4} },
JREAM

0

Самым простым, что я сделал, было

изменил мой отступ на вкладки

и это решило мою проблему.

Вы можете сделать то же самое,

в космос

а также в соответствии с вашими потребностями.

Упоминается снимок того же самого.

введите описание изображения здесь


Да, но вопрос задает ситуацию, когда вы начинаете и заканчиваете отступом в виде пробелов.
Магне

0

Недавно я столкнулся с подобной проблемой. Я использовал возвышенный редактор. это не проблема с кодом, но с редактором.

Ниже изменение настроек предпочтений работало для меня.

Меню Sublime Text -> Настройки -> Настройки: Синтаксис :

{
    "tab_size": 4,
    "translate_tabs_to_spaces": true
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.