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

sublime plugin - get region or delete word

我是 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")

现在它给我错误。

我该如何解决这个问题?

如何获取区域或删除一些单词?

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

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() 方法用您的字符串替换了一段文本;因此你不能只提供一个位置,因为这还不够:

您的调用提供了一个 point,这不是预期的,因此您收到了一个错误。您需要改为提供 Region

Region class 包含引用缓冲区中一段文本的开始 (a) 和结束 (b) 位置。如果 b 大于 a,则区域可以是 "forward";如果 b 小于 a,则区域可以是 "backward"。一个例子是选定的文本。如果光标在所选内容的右侧,则为 "forward",但如果光标在所选内容的左侧,则为 "backward".

区域也可能为空,在这种情况下 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,因此它将替换您插入的 testte(即看起来您删除了 [=32= 的最后两个字符].

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

如此处所示,您为 erase 方法提供了一个区域,它会删除该区域中的所有文本。所以如果你想删除你添加的文本 test,你会这样做:

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

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