Har*_*mer 1 workflow replace double-quotes sublimetext3
我使用文本编辑器 Sublime Text 3 来编辑代码,而且我经常会用双引号包裹一个字符串文字,我想将其更改为单引号,反之亦然。现在我滚动到每个引号,并将其替换为我想要的。是否有更快的工作流程?比如说,突出显示单词或热键或其他什么?我会发现它非常有用。
如果文件中有大量这样的字符串,并且您想一次转换所有这些字符串,则可以使用正则表达式查找/替换操作来查找和替换它们。您将使用Find > Replace...或Find > Find in files...来搜索捕获引号中文本的匹配正则表达式。
例如,您可以\"([^"\n]*)\"用作搜索词和'\1'替换文本,将所有双引号字符串替换为单引号。
你不能直接将类似的东西绑定到一个键上,因为 Find/Replace 不能在宏中使用,但是如果你想走那条路,你可以使用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)
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)