【问题标题】:Custom AutoFormat in Sublime TextSublime Text 中的自定义自动套用格式
【发布时间】:2021-11-27 20:06:09
【问题描述】:

有没有一种方法可以使用 Regex 进行格式化,但会在当前文档上绑定一些替换所有表达式以进行格式化?我经常使用充满正则表达式的手来清理我的 SQL 脚本,并且我不想每次都手动完成。有没有办法让所有这些热键同时运行?

这无关紧要,但这里是我使用的 SQL 正则表达式脚本,其中 -- 是注释,第二行是替换变量。如果您愿意,可以将其用作参考或将其用于您自己的脚本。

-- Add a space between = or + or * or / phrases
([@\w\d'")\]])([+=*\/]|<>|<=|>=|>|<)(['"@\w\d(-\[])
$1 $2 $3

-- Remove unnessisary space at the end of a line
([-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/\d\w])\h+$
$1

-- Add space between minus sign. Doesn't work after a letter because it could be mistaken with a hyphan.
([\d)\]])([-])([\w\d(\[])
$1 $2 $3

-- Add a space after a , that comes after a letter, ), ', or "
([)\w\d'")])([,])([\w\d'"(@])
$1$2 $3

-- Fix dates in comments that are messed up from adding spacing to /
\* *(Created on: )?(\d{1,2}) *\/ *(\d{1,2}) *\/ *(\d)
* $1$2/$3/$4

【问题讨论】:

标签: python sublimetext3 sublimetext sublime-text-plugin


【解决方案1】:

正如 Keith Hall 指出的那样,packagecontrol.io/packages/RegReplace 会很好地完成这项工作。

但是,仅供参考,如果你想直接创建这样一个自定义命令,它会像这样:

  1. 下拉Preferences &gt; Browse Packages...,然后进入用户文件夹。

  2. 创建一个名为sql_cleanup.py 的文件并粘贴以下内容:


from sublime_plugin import TextCommand
import re

# Sublime automatically recognizes this class name as being the "sql_fixup" command
class SqlFixupCommand(TextCommand):
    def run(self, edit):
        self._edit = edit
        self._process_text()

    def _get_file_content(self):
        return self.view.substr(sublime.Region(0, self.view.size()))

    def _update_file(self, doc):
        self.view.replace(self._edit, sublime.Region(0, self.view.size()), doc)

    def _process_text(self):
        txt = self._get_file_content()

        # Add a space between = or + or * or / phrases
        txt = re.sub(r"([@\w\d'\")\]])([+=*\/]|<>|<=|>=|>|<)(['\"@\w\d(-\[])", r"\1 \2 \3", txt)

        # Remove unnecessary space at the end of a line
        txt = re.sub(r"([-!$%^&*()_+|~=`{}\[\]:\";'<>?,.\/\d\w])\h+$", r"\1", txt)

        # Add space between minus sign. Doesn't work after a letter because it could be mistaken with a hyphen.
        txt = re.sub(r"([\d)\]])([-])([\w\d(\[])", r"\1 \2 \3", txt)

        # Add a space after a , that comes after a letter, ), ', or "
        txt = re.sub(r"([)\w\d'\")])([,])([\w\d'\"(@])", r"\1\2 \3", txt)

        # Fix dates in comments that are messed up from adding spacing to /
        txt = re.sub(r"\* *(Created on: )?(\d{1,2}) *\/ *(\d{1,2}) *\/ *(\d)", r"* \1\2/\3/\4", txt)

        self._update_file(txt)
  1. 要选择性地将新命令添加到命令面板,请创建一个名为 sql_cleanup.sublime-commands 的文件并粘贴以下内容:
[
  { "caption": "SQL: Fix Up Code","command": "sql_fixup" },
]

  1. 要选择将此命令添加到 Sublime 的工具菜单(在名为 SQL 的子菜单中),请创建一个名为 Main.sublime-menu 的文件,其内容如下:(如果已经有一个名为 SQL 的子菜单,那么这会将其添加到任何已经在那里了。)
[
  {
    "id": "tools",
    "children": [
      {
        "caption": "SQL",
        "id": "sql-tools",
        "mnemonic": "S",
        "children": [
          {
            "caption": "Fix Up Code",
            "command": "sql_fixup" },
        ]
      }
    ]
  },
]
  1. 要选择性地将此命令绑定到击键,请创建一个名为 Default (Windows).sublime-keymap(或您所在的任何平台)的文件,其内容类似于以下内容:(此示例将其绑定为按住 CTRL 键并键入 UQ。)
[
   { "keys": ["ctrl+u", "ctrl+q"], "command": "sql_fixup" },
]

【讨论】:

    猜你喜欢
    • 2014-02-16
    • 2016-02-01
    • 2013-08-16
    • 2018-09-21
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多