用于替换引号的 Sublime 工作流

Har*_*mer 1 workflow replace double-quotes sublimetext3

我使用文本编辑器 Sublime Text 3 来编辑代码,而且我经常会用双引号包裹一个字符串文字,我想将其更改为单引号,反之亦然。现在我滚动到每个引号,并将其替换为我想要的。是否有更快的工作流程?比如说,突出显示单词或热键或其他什么?我会发现它非常有用。

Oda*_*urd 5

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

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

你不能直接将类似的东西绑定到一个键上,因为 Find/Replace 不能在宏中使用,但是如果你想走那条路,你可以使用RegReplace包来做到这一点。

如果您还没有这样做,您可以通过利用多个游标来加速您当前使用的工作流程。

例如,您可以选择第一个引用,然后按Ctrl+DOption+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)
Run Code Online (Sandbox Code Playgroud)

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

在使用中,您将使用如下所示的键绑定,其中包含一个上下文,使键仅在光标位于字符串内时触发,以便在绝对不会的情况下不会弄乱您的选择工作。

{
    "keys": ["ctrl+shift+'"], "command": "swap_quotes",
    "context": [
        { "key": "selector", "operator": "equal", "operand": "string.quoted", "match_all": true }
    ]
},
Run Code Online (Sandbox Code Playgroud)