2012-07-24 2 views
3

Одна из хороших вещей о Textmate была способность трубы содержимое всей сферы в команде, например, так:Использовать весь размах в качестве входных данных плагина в Sublime Text 2

Textmate screenshot

Вы могли бы затем укажите область действия, например meta.class.python или что угодно.

Я пытаюсь написать небольшой плагин, который будет транслировать всю текущую область как вход для плагина (например (не совсем то, что я пытаюсь сделать, но закрываю), функцию, которая позволяет вам закомментировать весь класс Python, не выбирая все)

Используя текущий выбор (ы) в качестве входных данных достаточно просто:

import sublime, sublime_plugin 
import re 

class DoStuffWithSelection(sublime_plugin.TextCommand): 
    def run(self, edit): 
     for region in self.view.sel(): 
      if not region.empty(): 
       changed = region # Do something to the selection 
       self.view.replace(edit, region, changed) # Replace the selection 

Я обыскивал Sublime Text плагин API для какого-то способа сделать что-то как for region in self.view.scope(), но безуспешно.

Есть ли способ использовать содержимое текущей области под курсором в качестве входа для функции плагина? Или, что еще лучше, способ использовать всю область действия, если нет выбора, но используйте выделение, если оно есть.

Спасибо!

ответ

2

Если вы хотите получить текст, который вы выбрали, примером может служить следующий фрагмент кода.

if not region.empty(): 
    selectText = self.view.substr(region) 
    ... 

Если вы хотите получить текст, в котором находится курсор, приведен пример фрагмента кода.

if region.empty(): 
    lineRegion = self.view.line(region) 
    lineText = self.view.substr(lineRegion) 
    ... 

Для получения более подробной информации см http://net.tutsplus.com/tutorials/python-tutorials/how-to-create-a-sublime-text-2-plugin/ и http://www.sublimetext.com/docs/api-reference.

+1

Использование примера 'if region.empty()' успешно получает всю строку, где находится курсор, но не получит всю область видимости. Он также не позволит вам указать, какую область вы хотите (например, класс Python имеет 'source.python'' meta.class.python' и 'entity.name.type.class.python' как области действия, никоим образом выбрать тот, который будет использовать плагин. – Andrew