升华插件获取区域或删除单词

2024-04-25 23:22:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我是高级插件开发的新手。你知道吗

这是我想做的

  • 先写点东西
  • 然后移除或替换某物(移除会更好)

这是我的密码:

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

现在它给了我错误。

我如何解决这个问题?你知道吗

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


Tags: runself插件view密码defeditplugin
1条回答
网友
1楼 · 发布于 2024-04-25 23:22:29

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

Insert Help

从字面上讲,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))

现在这个命令的结果就好像它根本没有插入任何东西一样。你知道吗

相关问题 更多 >