Sublime Text 2 — автоматический отступ для скобок и HTML-тегов

(Примечание. В этих примерах я буду использовать символ вертикальной черты "|" для обозначения курсора.)

В Sublime Text 2, когда я набираю фигурную скобку, автоматически добавляется соответствующая фигурная скобка, например:

{|}

с курсором между двумя фигурными скобками. Затем, когда я нажимаю Enter, он автоматически добавляет дополнительную новую строку и отступ, в результате чего получается:

{
    |
}

Однако такое же поведение отступа не происходит со скобками и элементами HTML. Например, если я наберу скобку «[», она автоматически добавит соответствующую скобку, например:

[|]

Но когда я нажимаю Enter, результат такой:

[
|]

Он не добавляет лишней строки или отступа. Точно так же, когда я набираю "div.some-class", а затем Tab, я получаю:

<div class="some-class">|</div>

Но когда я нажимаю Enter, я получаю

<div class="some-class">
|</div>

Не то, что я хочу. Единственный случай, который работает правильно, — это фигурные скобки. Но во всех трех случаях (скобки, скобки, элементы html) я хочу добавить дополнительную строку и отступ. Таким образом, все они должны выглядеть так:

Брекеты:

{
    |
}

Скобки:

[
    |
]

HTML-элементы:

<div class="some-class">
    |
</div>

Как я могу это сделать?


person jbyrd    schedule 06.07.2015    source источник


Ответы (2)


Установите плагин EMMET, он сделает это, а также множество дополнительных замечательных функций, особенно для написания HTML и CSS. :)

Если вы еще не установили Управление пакетами (для простой установки новых пакетов/плагинов), установите его, следуя инструкциям здесь.

Затем вы можете просто нажать CTRL+SHIFT+P и написать Package Control : Instal Package, найти EMMET и установить его. После этого перезапустите Sublime Text, и он должен работать :)

person i333    schedule 20.07.2015

Объяснение

Я только что придумал для себя, как сделать одну вещь из твоего списка.

Я изменил регулярное выражение, которое запускается при нажатии клавиши "enter".

Старое регулярное выражение проверяло это "operand": "\\{$" и это "operand": "^\\}"

Я добавил проверки or, используя конвейер |, чтобы также проверить [ и ( таким же образом: "operand": "\\{$|\\[$|\\($" и "operand": "^\\}|^\\]|^\\)"


Направления

Перейдите в раздел Настройки>Привязки клавиш — Пользователь.

Лично я организую этот файл, помещая короткие простые привязки вверху и более крупные привязки/проблемы блока внизу. Я считаю следующее более крупным блоком.

Вставьте этот новый код в файл:

  // Auto-insert line and indent on square bracket and bracket (parenthesis)
  { "keys": ["enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line in Braces.sublime-macro"}, "context":
    [
      { "key": "setting.auto_indent", "operator": "equal", "operand": true },
      { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
      { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$|\\[$|\\($", "match_all": true },
      { "key": "following_text", "operator": "regex_contains", "operand": "^\\}|^\\]|^\\)", "match_all": true }
    ]
  },
  { "keys": ["shift+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line in Braces.sublime-macro"}, "context":
    [
      { "key": "setting.auto_indent", "operator": "equal", "operand": true },
      { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
      { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$|\\[$|\\($", "match_all": true },
      { "key": "following_text", "operator": "regex_contains", "operand": "^\\}|^\\]|^\\)", "match_all": true }
    ]
  },

Несколько заметок:

  • Мой код делает это для круглых скобок, как я уже сказал. (Sublime называет круглые скобки «скобками», в отличие от «квадратных скобок» и «скобок».)
  • Если вы не хотите, чтобы это работало в скобках, измените первую проверку «операнд» на это: "operand": "\\{$|\\[$" и проверку «операнд» в следующей строке на это: "operand": "^\\}|^\\]"
  • Наконец, я предполагаю, что Sublime правильно анализирует его в любом случае, но у меня есть запятая , в конце моей закрывающей скобки, что предполагает, что у вас есть еще несколько привязок клавиш, которые следуют. Если это последняя привязка перед закрывающей квадратной скобкой в ​​конце файла, запятую следует убрать.

Кроме того, по крайней мере, в Sublime Text 3 ваши вопросы об отступе <div> были исправлены.

person Reed Dunkle    schedule 01.09.2016
comment
это не работает для фигурных скобок '()'. Последняя фигурная скобка также имеет отступ. - person marshy101; 15.11.2016
comment
У меня тоже была эта проблема, но на самом деле она вызывалась в отдельном файле. Это не было привязкой клавиш, но для меня это было в файле JavaScript.tmPreferences Я почти уверен. Мне потребовалось много времени, чтобы найти проблему, и я нигде не задокументировал ее. Я думаю, что внизу моего файла была строка, похожая на <key>indentBrackets</key><true/>, которую я удалил. - person Reed Dunkle; 15.11.2016
comment
Также обратите внимание, что скобки называются brackets, а не braces. - person Reed Dunkle; 15.11.2016
comment
Думаю, я нашел это. Откройте Default>Indentation Rules.tmPreferences и увидите строку внизу <key>indentParens</key><true/> - person Reed Dunkle; 15.11.2016
comment
Изучив его иерархию ссылок, я думаю, вам следует отредактировать файл User>Indentation_Rules.tmPreferences. - person Reed Dunkle; 15.11.2016