Sublime Text 2 插件:捕获选中的文本

Sublime Text 2 plugin: capture the selected text

我正在尝试编写我的第一个 ST2 插件(我也是Python 的新手)。我想要做的是捕获当前 selected 文本。这是我到目前为止所拥有的。我 认为 这会将所有 selected 文本保存到文本变量中,但看起来我只捕获 selection 的开始和结束索引.因此,如果我 select 缓冲区中的第一个字符,我的插件回调将打印“01”。我想要的是索引0和索引1之间的文本

import sublime, sublime_plugin

class CopyOnSelectListener(sublime_plugin.EventListener):
    def on_selection_modified(self, view):
        selections = view.sel()
        text = ""
        for s in selections:
            text += str(s.begin())
            if not s.empty():
                text += str(s.end())
        print(text)

每个选择的 ST2 API 参考是 here. view.sel() returns a RegionSet, an object containing the RegionRegion.aRegion.b 分别是表示区域开始和结束的整数。因此,如果您的视图包含

This is some text.

并且你选择了textRegion.a就是13,Region.b就是17。要真正得到一个Region的内容,你需要使用view.substr(region).以下代码会将每次选择的内容打印到控制台:

import sublime_plugin

class PrintSelectionTextCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        view = self.view
        for region in view.sel():
            print(view.substr(region))

您可以 运行 通过使用 Ctrl` 打开控制台,在打开的文件中进行一个或多个选择, 那么 运行ning

view.run_command("print_selection_text")

从控制台(假设您已将其保存为 Packages/User/print_selection_text.py)。