sublime插件-获取区域或删除单词

问题描述 投票:0回答:1

我是Sublime插件开发中的新手。

这是我想做的

  • 首先写点东西
  • 然后删除或替换某些东西(删除会更好)

所以这是我的代码:

class MyCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        print("load")
        self.view.insert(edit, 0, "test")
        self.view.replace(edit, 0, "te") #self.view.replace(edit, region, "te")

我在shell上运行此命令:

view.run_command("my")

现在它给了我错误。

我该如何解决?

我如何获得区域信息或仅删除一些单词?

python python-3.x sublimetext3 sublimetext sublime-text-plugin
1个回答
0
投票

view.insert()方法将要在文档中执行插入的点作为参数:

Insert Help

A point实际上只是文档的偏移量(以字符为单位);因此,0点是文档中的第一件事,2中应包含两个字符,依此类推。该部分正在为您工作。

中断的部分是对view.replace()的调用,这会给您这个错误(尽管路径会有所不同):

Traceback (most recent call last):
  File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 1088, in run_
    return self.run(edit)
  File "C:\Users\micro\AppData\Roaming\Sublime Text 3\Packages\User\untitled.py", line 9, in run
    self.view.replace(edit, 0, "te") #self.view.replace(edit, region, "te")
  File "C:\Program Files\Sublime Text 3\sublime.py", line 837, in replace
    sublime_api.view_replace(self.view_id, edit.edit_token, r, text)
TypeError: Region required

原因是view.replace()方法用您的字符串替换了一段文本;因此您不能只提供一个职位,因为那还不够:

Replace help

您的呼叫正在提供point,这是不期望的,因此会出现错误。相反,您需要提供Region

Region documentation

Region类包装了引用缓冲区中的文本范围的开始(a)和结束(b)位置。如果b大于a,则区域可以为“正向”;如果b小于a,则区域可以为“反向”。所选文本就是一个例子。如果光标在选择的右侧,则为“前进”,但如果光标在选择的左侧,则为“后退”。

区域也可能为空,在这种情况下,ab值相同。这样的区域的长度为0,因为它不跨越任何文本。一个例子就是光标位于文档中而没有选择。它代表一个选择,该选择在同一点开始和结束。

您可以使用上面的构造函数来构造区域;根据您要执行的操作,您需要以其他方式构造区域。

例如,您可以将上面的行替换为此:

self.view.replace(edit, sublime.Region(0), "te")

这告诉Sublime用文本te替换从位置0开始到位置0的文本。在这种情况下,只将字符插入缓冲区的开头,因为该区域是空的(因此它什么也不会代替)。

您也可以这样做:

self.view.replace(edit, sublime.Region(0, 4), "te")

[该区域现在跨越字符0到4,因此它将仅用test代替您插入的te(即,看起来您擦除了test的最后两个字符。

如果您的目标是纯粹删除文本,那么您需要view.erase()

Erase help

如此处所示,为erase方法指定一个区域,它会删除该区域中的所有文本。因此,如果您想删除添加的文本test,则可以执行以下操作:

self.view.erase(edit, sublime.Region(0, 4))

现在命令的结果就像它根本没有插入任何东西。

© www.soinside.com 2019 - 2024. All rights reserved.