在Sublime Text 3中自动选择粘贴的文本

时间:2017-05-31 07:10:58

标签: macros editor sublimetext3 sublimetext

是否有任何方法,插件,宏或其他东西使Sublime Text 3自动选择刚刚粘贴的文字?

我需要复制并粘贴一些JSON数据,但粘贴的文本永远不会与周围的文本一致。粘贴和缩进功能无法正常工作。

什么是重要功能,但它需要我选择一个文本块并按热键。因此,粘贴之后我会因为自动选择刚刚粘贴的文本块而受益,所以我可以按下reindent热键来正确缩进我粘贴的内容。

此外,如果我可以将整个过程绑定到热键,那就更好了,所以:

  • 选择文字
  • 复制
  • 按某个自定义热键运行宏(?)
  • 此宏粘贴文本,选择粘贴的文本并运行reindent热键(*)

*所以基本上我想做一个键绑定,比方说,ctrl + shift + b来做以下事情:

  • CTRL + V
  • 以某种方式选择粘贴的文字
  • CTRL + SHIFT + F

2 个答案:

答案 0 :(得分:3)

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

  • 从“工具”菜单 - >开发者 - >新插件......
  • 选择全部并替换为以下
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"的默认绑定。

工作原理:

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

您可以通过对再注册之前和之后的选择进行另一次比较,然后再次清除选择(通过将文本插入符重新定位到选择的结尾 - 即粘贴后的默认行为)。

答案 1 :(得分:0)

在MacOS上,您可以添加:

"find_selected_text": true

到Sublime Text->偏好设置 - >设置(用户设置视图)