Sublime Text 3, конвертировать пробелы во вкладки

192

Я знаю, что есть много сообщений об этом, но я не мог заставить его работать.
Я использую вкладки для кодирования. Есть ли способ, чтобы всегда преобразовывать пробелы во вкладки? Т.е. на открытие и на сохранение файлов? У кого-нибудь есть идея?

// редактировать:
я хочу сделать это автоматически ! -> открыть, сохранить или на лету
Кто-нибудь знает, как это сделать?


Я попробовал это :

import sublime, sublime_plugin, os

class ExpandTabsOnSave(sublime_plugin.EventListener):
  # Run ST's 'expand_tabs' command when saving a file
  def on_pre_save(self, view):
    if view.settings().get('expand_tabs_on_save') == 1:
      view.window().run_command('expand_tabs')

И вот мои настройки пользователя:

{
    "auto_complete_selector": "source - comment, meta.tag - punctuation.definition.tag.begin",
    "auto_indent": true,
    "detect_indentation": true,
    "draw_white_space": "all",
    "ensure_newline_at_eof_on_save": true,
    "expand_tabs_on_save": true,
    "font_face": "SourceCodePro-Regular",
    "font_size": 10,
    "format_on_save": true,
    "ignored_packages":
    [
        "Vintage"
    ],
    "indent_to_bracket": true,
    "open_files_in_new_window": false,
    "smart_indent": true,
    "tab_size": 4,
    "translate_tabs_to_spaces": false,
    "trim_automatic_white_space": true,
    "trim_trailing_white_space_on_save": true,
    "use_tab_stops": false,
    "word_wrap": false
}
Крис
источник
Плагин, который вы опубликовали, на самом деле отлично работает для меня на ST3, сборка 3059. Можете ли вы открыть консоль Ctrl + ~и посмотреть, не дает ли он каких-либо ошибок в плагине? И если у вас установлен Package Control, вы можете увидеть, если ExpandTabsOnSaveон указан как установленный плагин?
angerson
сумасшедший, кажется, установлен (перечислены в списке пакетов) и в консоли я не могу найти никаких ошибок :-(
chris
Попробуйте добавить print("debug")или подобный плагин, чтобы увидеть, выполняется ли он при сохранении.
angerson
Боже мой, это работает! был неправильный каталог на машине с Windows, пакеты перечислены в user /.../ AppData / Roaming / SublimeText3 / Packages Большое спасибо!
Крис
Убедитесь, что вы установили это представление как активное представление для окна перед выполнением команды. Возможно, это не очень вероятно, но после публикации вы можете развернуть вкладки другой страницы, отличной от той, которую вы пытаетесь сохранить. Я полагаю, что даже с видом фокуса есть вероятность, что его можно сохранить в неправильный файл, но, по крайней мере, вы можете минимизировать риск.
Скурода

Ответы:

378

В правом нижнем углу окна Sublime Text вы увидите индикатор отступа, который выглядит примерно так:

Меню параметров отступа

После нажатия на кнопку откроется меню с опциями для настройки ваших предпочтений отступов, и что более важно, Convert Indentation to Tabs/Spaces.

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

Это же меню указано в разделе View -> Indentation.

angerson
источник
42
Да, я знаю. Я хочу сделать это автоматически ... есть идеи?
Крис
2
@ Крис ツ Ах. Не могли бы вы переформатировать свой вопрос, чтобы сделать это более очевидным? Я скучал по твоему смыслу, так что другие тоже могут.
angerson
У меня нет этой строки состояния внизу - как мне ее получить?
геоидезическая
1
И это относится ко всему файлу, и не может быть сделано только при выборе.
not2qubit
Очень хорошо. Я также сделал 'command-a', чтобы выбрать все, 'command- [', чтобы удалить отступ, затем 'edit> line> reindent', чтобы исправить файл. Я уверен, что это может быть встроено в макрос.
Брукс Дюбуа
130

В нижней части окна Sublime вы увидите что-то, представляющее ваши настройки табуляции / пространства.

Затем вы получите раскрывающийся список с кучей вариантов. Возможные варианты:

  • Преобразовать отступ в пробелы
  • Преобразовать отступы во вкладки

Примените желаемую настройку ко всему документу.

Надеюсь это поможет.

erier
источник
2
Я хотел бы, чтобы это могло быть сделано при загрузке и автоматически ... для всех файлов, которые я открываю. Я имею в виду: преобразование отступов в табуляцию. Он будет запускаться автоматически при загрузке :-)
Филипп OvertoneSinger Rydlo
1
Я слышал тебя об этом. Я предпочитаю вкладки, но я понимаю, почему много кода написано с пробелами. С пробелами не будет никаких противоречий между IDE - пробел это пробел. Вкладки могут занимать переменное количество пробелов между IDE и делать код странным.
erier
Здравствуйте @Green - что с этим не работает? Давайте разберемся с этим ...
erier
80

Как вы, возможно, уже знаете, вы можете настроить параметры отступа Preferences.sublime-settings, например:

"detect_indentation": true,
"tab_size": 4,
"translate_tabs_to_spaces": false

Это позволит вашему редактору использовать вкладки шириной в 4 пробела и переопределит поведение по умолчанию, при котором Sublime будет соответствовать отступу любого редактируемого файла. С этими настройками повторный отступ файла приведет к замене пробелов на вкладки.

Что касается автоматического повторного отступа при открытии файла, это не так просто (но, вероятно, это не очень хорошая идея, так как изменения пробелов наносят ущерб файлам diff). Что может быть лучше: вы можете назначить ярлык для повторного отступа и просто вызвать его, когда откроете новый файл, который нужно исправить.

джастин
источник
13

Вы можете использовать командную палитру, чтобы решить эту проблему.

Шаг 1: Ctrl + Shift + P(активировать палитру команд)

Шаг 2: введите «Отступ», выберите "Indentation: Convert to Tabs"

Jojoleo
источник
1
Превосходно. Спасибо.
RJ
Лучшее решение. Спасибо!
Мэтью К
7

В моем случае эта строка решила проблему:

"translate_tabs_to_spaces": false
ОЛРС
источник
4

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

Создайте этот файл .../Packages/User/on_file_load.py::

import sublime
import sublime_plugin

class OnFileLoadEventListener(sublime_plugin.EventListener):

    def on_load_async(self, view):
        view.run_command("unexpand_tabs")

НОТА. Это приводит к тому, что файл находится в несохраненном состоянии после открытия, даже если не было никакого фактического преобразования пространства в табуляцию ... возможно, некоторые могут помочь с исправлением для этого ...

TheStoryCoder
источник
Я думаю, что вы имели в виду .../Packages/User/on_file_load.py, а не.php
Пранав Nutalapati
@PranavNutalapati Спасибо, что поймали это.
TheStoryCoder
Да, конечно. Нет проблем.
Пранав Нуталапати
попробуй on_loadвместо on_load_async.
Педро Гоес
3

Чтобы автоматически преобразовывать пробелы во вкладки при сохранении , добавьте следующий скрипт Python во вновь созданную подпапку с именем «UnexpandTabsOnSave» в «$ SUBLIME_HOME $ \ Packages \»:

import sublime, sublime_plugin, os

class ConvertSpacesToTabsOnSave( sublime_plugin.EventListener ):
  # Run Sublime's 'unexpand_tabs' command when saving any file
  def on_pre_save( self, view ):
    view.window().run_command( 'unexpand_tabs' )

Спасибо за начальный ресурс.

sean2078
источник
0

Вы можете заменить вкладки пробелами во всех файлах проекта:

  1. Делать Заменить все Ctrl+Shif+F
  2. Установить регулярное выражение поиска ^\A(.*)$
  3. Установить каталог в Your dir
  4. Заменить на \1

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

  5. Это приведет к открытию всех файлов проекта, а их буфер будет помечен как грязный. Благодаря этому вы теперь можете при желании включить следующие параметры Sublime Text, чтобы обрезать все файлы, замыкающие пробелы, и обеспечить новую строку в конце каждого файла.

    Вы можете включить эти настройки, зайдя в меню Preferences -> Settingsи добавив это содержимое в ваш файл настроек:

    1. "ensure_newline_at_eof_on_save": true,
    2. "trim_trailing_white_space_on_save": true,
  6. Откройте консоль Sublime Text, зайдя в меню View -> Show Console (Ctrl+`)и запустите команду: import threading; threading.Thread( args=(set(),), target=lambda counterset: [ (view.run_command( "expand_tabs", {"set_translate_tabs": True} ), print( "Processing {:>5} view of {:>5}, view id {} {}".format( len( counterset ) + 1, len( window.views() ), view.id(), ( "Finished converting!" if len( counterset ) > len( window.views() ) - 2 else "" ) ) ), counterset.add( len( counterset ) ) ) for view in window.views() ] ).start()
  7. Теперь сохраните все измененные файлы, перейдя в меню File -> Save All
пользователь
источник
0

если у вас Mac, просто используйте параметр справки (обычно последний параметр в строке меню Mac), затем введите: «отступ с вкладки» и выберите ширину отступа вкладки

но, как правило, вы можете пойти по этому пути: вид -> отступ

Али
источник
0

Используйте следующую команду, чтобы решить это:

autopep8 -i <filename>.py
Шарьяр Вохра
источник
-1

Вот как вы можете сделать это автоматически при сохранении: https://coderwall.com/p/zvyg7a/convert-tabs-to-spaces-on-file-save

К сожалению, пакет не работает, когда вы устанавливаете его из диспетчера пакетов.

Soheil
источник
Это делает наоборот. Он преобразует вкладки в пробелы.
Илья Москвин