Неправильный возвышенный отступ для PHP-файлов
Я использовал пользовательский ярлык для отступа в возвышенном тексте, упомянутом в этом посте Отступ нескольких строк в Возвышенном тексте
Но это не работает, если есть нечетное количество пробелов. Например, размер моей вкладки установлен на 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";
}
}
Что мне нужно сделать, чтобы сделать правильный отступ?
1 answers
Играя с этим, я обнаружил, что если вы сначала полностью 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" }
И теперь он правильно переиндентирует ваш код.