在 Sublime Text 3 中自动 select 粘贴文本

Automatically select pasted text in Sublime Text 3

有没有办法,插件,宏之类的东西让Sublime Text 3自动select刚刚粘贴的文本?

我需要复制和粘贴一些 JSON 数据,但粘贴的文本与周围的文本始终不一致。粘贴和缩进 - 功能对此无法正常工作。

有效的是重新缩进功能,但它需要我 select 一段文本并按下热键。因此,在粘贴之后,我会受益于让刚刚粘贴的文本块自动 selected,这样我就可以按重新缩进热键来正确缩进我粘贴的内容。

另外,如果能把整个过程绑定到一个热键上就更好了,所以:

*所以基本上我想做一个键绑定,比如 ctrl+shift+b 来执行以下操作:

您可以创建一个插件来执行此操作,并使用键绑定执行它:

  • 从工具菜单 -> 开发人员 -> 新插件...
  • select 全部替换为下面的
import sublime
import sublime_plugin


class PasteAndReindentCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        before_selections = [sel for sel in self.view.sel()]
        self.view.run_command('paste')
        after_selections = [sel for sel in self.view.sel()]
        new_selections = list()
        delta = 0
        for before, after in zip(before_selections, after_selections):
            new = sublime.Region(before.begin() + delta, after.end())
            delta = after.end() - before.end()
            new_selections.append(new)
        self.view.sel().clear()
        self.view.sel().add_all(new_selections)
        self.view.run_command('reindent')
  • 将其保存在 ST 建议 (Packages/User/) 的文件夹中,如 paste_and_reindent.py
  • 将以下内容添加到您的用户键绑定中 { "keys": ["ctrl+shift+b"], "command": "paste_and_reindent" },

请注意,Ctrl+Shift+B 将替换 "Build With" 的默认绑定。

工作原理:

  • 按下键绑定时,它会运行在插件中创建的新命令
  • 这存储当前文本select离子位置
  • 然后执行粘贴操作
  • 然后它获得新的文本插入符号位置
  • 然后它将旧位置与新位置进行比较,select粘贴的文本
  • 然后运行 ​​reindent 命令

你可以让它在之后再次清除 selections(通过将文本插入符重新定位到 selections 的末尾 - 即粘贴后的默认行为)通过进行另一次比较重新压痕前后的 select 个离子。

在 MacOS 上您可以添加:

"find_selected_text": true

到 Sublime Text->首选项->设置(用户设置视图)