使用Sublime Text

时间:2017-05-07 05:58:37

标签: sublimetext3 sublimetext

在声明(PHP)函数之后和关闭它之前,我倾向于留下1行空格。

function foo($bar) {
  [empty line]
  do_the_things();
  return $something;
  [empty line]
}

对我来说,阅读起来似乎更清楚。

但是我没有注意到很多其他人这样做,我想它会为其他人提供我的代码。

我想知道是否有办法让我的编辑器只识别函数声明“function foo($ bar){”,只是在视觉上将10px边距保留在该行之下然后寻找结束“}”并在其上方留出10px的保证金?类似于语法高亮,但不是突出显示它会填充它。

1 个答案:

答案 0 :(得分:1)

从build 3118开始,Sublime Text有一个名为Phantoms的功能,可用于在缓冲区内插入内联HTML内容。我们可以编写一个插件来使用此功能来创建您想要的填充。 (没有其他方法可以做到,因为配色方案无法更改字体大小等,line_padding_top / line_padding_bottom首选项会影响所有行。)

  • 工具菜单 - >开发者 - >新插件......
  • 使用以下内容替换模板:
import sublime
import sublime_plugin


class FunctionSpacer(sublime_plugin.ViewEventListener):
    @classmethod
    def is_applicable(cls, settings):
        return settings is not None and '/PHP/' in settings.get('syntax', '')

    spacing = None

    def __init__(self, view):
        super().__init__(view)
        self.spacing = sublime.PhantomSet(view)
        self.on_modified_async()

    def on_modified_async(self):
        regions = list()

        # find all function names and braces
        potential_spacing_locations = self.view.find_by_selector('entity.name.function, punctuation.section.block')
        depth = -1
        for region in potential_spacing_locations:
            if self.view.match_selector(region.begin(), 'entity.name.function'):
                regions.append(region)
                depth = 0
            elif depth != -1:
                for pos in range(region.begin(), region.end()):
                    if self.view.match_selector(pos, 'punctuation.section.block.begin') and depth != -1:
                        depth += 1
                    elif self.view.match_selector(pos, 'punctuation.section.block.end'):
                        depth -= 1
                        if depth == 0:
                            row, col = self.view.rowcol(region.begin())
                            regions.append(sublime.Region(self.view.text_point(row - 1, col)))
                            depth = -1

        phantoms = [sublime.Phantom(region, '<br style="font-size: 10pt" />', sublime.LAYOUT_BELOW) for region in regions]
        self.spacing.update(phantoms)
  • 将其保存在ST建议的文件夹中,如function_spacing.py

工作原理:

  • 当语法设置为PHP并且修改了缓冲区(或者首先加载了插件)时,它会找到文件中的所有函数定义并逐个遍历它们:
  • 它在功能定义
  • 下面添加了一个幻像
  • 然后通过所有相关的花括号来确定函数的结束位置,并在关闭函数的花括号上方的行中添加一个Phantom

因为它适用于语法高亮引擎,所以它非常有效,并且不必重新实现任何相同的逻辑,例如忽略字符串或注释等中的大括号。