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

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

Author: Community, 2017-02-28

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" }

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

 4
Author: Keith Hall, 2017-03-02 07:28:58