用于替换报价的Sublime工作流程

时间:2018-01-22 14:28:19

标签: replace sublimetext3 workflow double-quotes

我使用文本编辑器Sublime Text 3来编辑代码,并且我经常使用双引号括起来的字符串文字,我想将其更改为单引号,反之亦然。现在我滚动到每个引号,并用我想要的那个替换它。这有更快的工作流程吗?说,突出显示单词或热键或什么?我觉得它非常实用。

1 个答案:

答案 0 :(得分:3)

如果文件中有大量此类字符串,并且您希望一次转换所有这些字符串,则可以使用正则表达式查找/替换操作来查找和替换所有字符串。您可以使用Find > Replace...Find > Find in files...来搜索匹配的正则表达式,以捕获引号中的文本。

例如,您可以使用\"([^"\n]*)\"作为搜索字词,使用'\1'作为替换文字,将所有双引号字符串换成单引号。

您无法直接将类似内容绑定到某个键,因为无法在宏中使用“查找/替换”,但如果您想要使用该路径,则可以使用RegReplace包执行此操作。

如果您尚未使用多个游标,则可以通过利用多个游标来加速您当前使用的工作流程。

例如,您可以选择第一个引号,然后按 Ctrl + D Option + D 选择另一个引号。现在您有两个游标,按 Backspace 删除两个引号,然后按新引号字符插入新的引号。

这不能被宏观化并绑定到一个键,因为find_under_expand命令不能在宏中使用。

对于完整的按键解决方案,据我所知,您需要一些插件才能为您完成此操作。其中一个例子似乎是ChangeQuotes,虽然我从来没有亲自使用它。

也可以编写自己的小插件,如下所示:

import sublime
import sublime_plugin


class SwapQuotesCommand(sublime_plugin.TextCommand):
    pairs = ["'", '"']

    def run(self, edit):
        self.view.run_command("expand_selection", {"to": "scope"})
        for sel in self.view.sel():
            self.toggle(edit, sel)

    def toggle(self, edit, region):
        begin = self.view.substr(region.begin())
        end = self.view.substr(region.end() - 1)

        if begin == end and begin in self.pairs:
            index = self.pairs.index(begin) + 1
            new = self.pairs[index % len(self.pairs)]

            for point in (region.begin(), region.end() - 1):
                self.view.replace(edit, sublime.Region(point, point+1), new)

这会扩展当前范围内所有游标的选择,然后如果选择的两端都是匹配的引号,则使用的引号将被交换。

在使用中,你将使用一个键绑定,如下所示,其中包含一个上下文,使键只有触发,而光标在一个字符串内,这样它就不会搞砸你的选择,如果肯定的话不行。

{
    "keys": ["ctrl+shift+'"], "command": "swap_quotes",
    "context": [
        { "key": "selector", "operator": "equal", "operand": "string.quoted", "match_all": true }
    ]
},