【问题标题】:Improper sublime indentation for PHP filesPHP 文件的 sublime 缩进不正确
【发布时间】:2017-07-19 12:28:00
【问题描述】:

我一直在使用自定义快捷方式来缩进这篇文章中提到的 Sublime Text Indent multiple lines in 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 将按预期工作
  • 我完全同意你的看法。但应该有更好的解决方案。
  • 这种行为似乎会影响多种类型的文件——不仅仅是 PHP

标签: php editor sublimetext2 sublimetext3 indentation


【解决方案1】:

在玩这个的时候,我发现如果你首先完全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" }

现在它会正确地重新缩进你的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 2014-01-05
    相关资源
    最近更新 更多