2015-08-25 4 views
0

Я пытаюсь написать мой первый Плагин ST2 (я также новичок в Python). То, что я хочу сделать, это захват выбранного текста. Это то, что у меня есть до сих пор. I думал, это сохранит весь выделенный текст в текстовой переменной, но похоже, что я только фиксирую начальные и конечные индексы выделения. Таким образом, если я выбираю первый символ в буфере, мой обратный вызов плагина печатает «01». То, что я хочу является текст между индексом 0 и индексом 1.Плагин Sublime Text 2: захватить выделенный текст

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) 

ответ

1

Ссылка ST2 API является here. view.sel() возвращает RegionSet, объект, содержащий Region каждого выбора. Region.a и Region.b - это целые числа, относящиеся к началу и концу области. Таким образом, если представление содержит

This is some text. 

и вы выбрали text, Region.a бы 13 и Region.b будет 17. Чтобы действительно получить содержимое области, вам нужно использовать 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`, что делает один или несколько выбранных в открытом файле, затем запустить

view.run_command("print_selection_text") 

с консоли (при условии, что вы сохранили его как Packages/User/print_selection_text.py).