2013-10-31 77 views
3

選定的文本如何sublime text 3插件獲取所選文本:API:如何從對象sublime.Selection

import sublime, sublime_plugin 

class plugin_window__go_to_relative_plugin__Command(sublime_plugin.WindowCommand): 
    def run(self):    
     window = self.window 
     view = window.active_view() 
     sel = view.sel() 
     sublime.status_message("selection: "+sel) 

我的代碼拋出錯誤:

 sublime.status_message("selection: "+sel) 
TypeError: Can't convert 'Selection' object to str implicitly 

view.sel()回報sublime.Selection對象。但我不知道如何從那裏獲取選定的文本。

該插件必須工作如下: 當我把它稱爲對視......

sublime text selection

...它應該設置文本"dow = self.w"變量sel

當我做str(sel)它返回<sublime.Selection object at 0x1047fd8d0>

Docs對我來說不是很清楚。

回答

5

我的文檔的意思的理解是這樣的:

這聽起來像一個sublime.View對象的sel()方法返回一個sublime.Selection對象,它是一個容器 - 因此您應該能夠遍歷其內容(它包含的區域)或使用[]操作將它們編入索引。

通過調用sublime.View對象的substr(region)方法,可以在Selection中獲取與每個sublime.Region相關聯的文本。這是有道理的,因爲這個編輯器允許有多個同時選擇 - 它的一個更酷的功能,恕我直言。

希望這會有所幫助。

6

在單一選擇的情況下:

import sublime, sublime_plugin 

class selection_plugin__Command(sublime_plugin.WindowCommand): 
    def run(self):    
     print('selection_plugin__ called') 
     window = self.window 
     view = window.active_view() 
     sel = view.sel() 

     region1 = sel[0] 
     selectionText = view.substr(region1) 
     print(selectionText) 
+0

你似乎忽略了什麼是可能有多個區域,因此多' selectionText's。順便說一句,這不是一個答案,可能應該添加到您的問題,而不是。 – martineau

+0

無論如何,謝謝你,你幫了我很多。對於我的任務,我只需要首先選擇。如果你添加答案,我接受它。 –

+0

很高興我的評論有幫助 - 文檔有點難以理解。也不是這樣,根據他們的說法,像'sel()'返回的'sublime.Selection',按照排序順序保存,這意味着'sel [0]'只是視圖中最早的區域 - 最靠近頂部的那個 - 不是當前光標附近的那個或最後一個選定的東西。我想如果你看看Packages/Default/delete_word.py這個預製的插件,你將能夠計算出當前光標位置是什麼,因爲那個「刪除光標左邊或右邊的一個單詞「所以它必須知道那個位置在哪裏 – martineau

1

使用它的控制檯,然後在蟒蛇 view.substr追加((view.sel())[0])