Я использовал собственный ярлык для отступа в Sublime Text, упомянутом в этом посте Отступ в нескольких строках в Sublime Text
Но это не работает, если есть нечетное количество пробелов. Например, размер моей вкладки равен 2 пробелам, а когда в начале любой строки есть 3 пробела, оставшийся код не отступает.
например:
<?php
function test_indent() {
if (condition) {
echo "here";
}
else {
echo "else";
}
}
И когда я делаю отступ с пользовательским ярлыком, указанным в приведенном выше посте, а именно:
{ "keys": ["ctrl+shift+f"], "command": "reindent", "args": {"single_line": false} }
для меня это выглядит так:
function test_indent() {
if (condition) {
echo "here";
}
else {
echo "else";
}
}
Что мне нужно сделать, чтобы сделать отступ правильно?
Играя с этим, я обнаружил, что если вы полностью unindent
выбор сначала, потом reindent
будет работать как положено. Кажется, это ошибка в reindent
Команда, которая появляется, когда отступ не кратен установленному «размеру вкладки».
Поэтому мы можем обойти эту ошибку, изменив ярлык, чтобы полностью отменить выделение, а затем заново сделать отступ.
От Tools
меню, выберите Developer
-> New Plugin...
Выберите все и замените его следующим:
import sublime
import sublime_plugin
import re
class UnindentAndReindentCommand(sublime_plugin.TextCommand):
def run(self, edit):
while any([sel for sel in self.view.sel() if re.search('^[ \t]+', self.view.substr(sel.cover(self.view.line(sel.begin()))), re.MULTILINE)]):
self.view.run_command('unindent')
self.view.run_command('reindent', { 'single_line': False })
Сохраните его в том месте, которое предлагает ST, как что-то вроде fix_reindent.py
— расширение файла важно, но базовое имя — нет.
Затем измените связывание клавиш, чтобы использовать новый unindent_and_reindent
Команда, которую мы только что создали:
{ "keys": ["ctrl+shift+f"], "command": "unindent_and_reindent" }
И теперь он будет правильно перерисовывать ваш код.
Других решений пока нет …