Как применить автоматический отступ для редактора CodeMirror?

Я использую обычный редактор Codemirror для нескольких языков (Groovy, Python, Beanshell, XSLT). В зависимости от языка, выбранного в раскрывающемся списке, я устанавливаю соответствующий режим для редактора.

Как применить автоматический отступ для перечисленных выше языков?


person Parag A    schedule 12.04.2013    source источник


Ответы (1)


Режимы CodeMirror могут предоставлять отступы для соответствующих языков, и большинство из них это делает (например, режим python). Это можно проверить, проверив исходный код режима, чтобы проверить, был ли реализован indent(state, textAfter). Из документов:

Если вы хотите, чтобы ваш режим обеспечивал умный отступ (с помощью метода indentLine и методов indentAuto и newlineAndIndent команды, к которым могут быть привязаны клавиши, вы должны определить метод indent(state, textAfter) в вашем режиме объект.

После применения режима, который определяет indent(state, textAfter), и при условии, что smartIndent установлено на true (что является значением по умолчанию), автоматический отступ должен предоставляться прозрачно, без дополнительных усилий с вашей стороны.

Если режим не поддерживает умный отступ из коробки, вы всегда можете реализовать его самостоятельно. См. раздел написание режимов CodeMirror в документации.

person Eliran Malka    schedule 12.04.2013
comment
Я видел, что в python.js есть метод с именем indent(stream, state, type). Я не уверен, что это за параметры, называемые потоком и состоянием. Не могли бы вы рассказать мне? - person Parag A; 12.04.2013
comment
Я прочитал это дважды, но не смог получить раствор. Все, что я понял, это то, что python.js содержит код для отступов. Но не уверен, как его использовать. - person Parag A; 13.04.2013
comment
Вы используете его, просто используя редактор — когда вы пишете код в редакторе, каждая новая строка будет иметь отступ в соответствии с правилами, продиктованными режимом. Пожалуйста, прочитайте документацию Codemirror по режимам написания, как было предложено, это прольет больше света на вещи. Вы также ищете возможности форматирования кода постфактум? - person Eliran Malka; 13.04.2013
comment
Я. В частности, данный режим CodeMirror не всегда использует то же количество пробелов для отступа, что и существующий код. Даже если бы было возможно настроить режим, это нужно было бы сделать для каждого режима. И во время редактирования я не нашел простого (например, с одним ключом) способа автоматического изменения текущей строки так, как CodeMirror хочет это сделать. Например, в emacs я могу нажать табуляцию на строке, и отступ будет правильным, в CodeMirror он просто добавляет уровень отступа, а это не то, что мне нужно. - person Michael; 04.04.2014
comment
Хорошо, кажется, что параметр indentUnit в конструкторе может изменить единицу отступа, а shift+tab автоматически отступит текущую строку, но было бы неплохо, если бы был быстрый способ изменить отступ всего текущего документа, например, если Я решаю изменить от 2 пробелов на отступ до 4 или что-то в этом роде. - person Michael; 04.04.2014
comment
Привет, @Michael, если вы нажмете Ctrl + A (чтобы выделить весь текст в документе), а затем Shift + Tab, он изменит отступ всего документа. - person mdiehl13; 09.12.2020