редактор — Неправильный возвышенный отступ для файлов PHP

Я использовал собственный ярлык для отступа в 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";
}
}

Что мне нужно сделать, чтобы сделать отступ правильно?

5

Решение

Играя с этим, я обнаружил, что если вы полностью 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" }

И теперь он будет правильно перерисовывать ваш код.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]