正如 Keith Hall 指出的那样,packagecontrol.io/packages/RegReplace 会很好地完成这项工作。
但是,仅供参考,如果你想直接创建这样一个自定义命令,它会像这样:
-
下拉Preferences > Browse Packages...,然后进入用户文件夹。
-
创建一个名为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)
- 要选择性地将新命令添加到命令面板,请创建一个名为
sql_cleanup.sublime-commands 的文件并粘贴以下内容:
[
{ "caption": "SQL: Fix Up Code","command": "sql_fixup" },
]
- 要选择将此命令添加到 Sublime 的工具菜单(在名为 SQL 的子菜单中),请创建一个名为
Main.sublime-menu 的文件,其内容如下:(如果已经有一个名为 SQL 的子菜单,那么这会将其添加到任何已经在那里了。)
[
{
"id": "tools",
"children": [
{
"caption": "SQL",
"id": "sql-tools",
"mnemonic": "S",
"children": [
{
"caption": "Fix Up Code",
"command": "sql_fixup" },
]
}
]
},
]
- 要选择性地将此命令绑定到击键,请创建一个名为
Default (Windows).sublime-keymap(或您所在的任何平台)的文件,其内容类似于以下内容:(此示例将其绑定为按住 CTRL 键并键入 UQ。)
[
{ "keys": ["ctrl+u", "ctrl+q"], "command": "sql_fixup" },
]