我是高级插件开发的新手。你知道吗
这是我想做的
这是我的密码:
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()
方法将文档中要执行插入的点作为参数:从字面上讲,
point
只是文档中的一个偏移量(以字符为单位);因此,0
点是文档中的第一件事,2
就是文档中的两个字符,依此类推。那部分对你有用。你知道吗中断的部分是对
view.replace()
的调用,这会导致此错误(尽管路径不同):原因是
view.replace()
方法用字符串替换了一段文本;因此不能仅提供一个位置,因为这还不够:您的调用提供了一个
point
,这是不需要的,因此您会得到一个错误。相反,您需要提供Region
:Region
类包装引用缓冲区中文本范围的开始(a
)和结束(b
)位置。如果b
大于a
,则区域可以是“向前的”,如果b
小于a
,则区域可以是“向后的”。选择文本就是一个例子。如果光标位于所选内容的右侧,则为“向前”,但如果光标位于所选内容的左侧,则为“向后”。你知道吗区域也可能为空,在这种情况下,
a
和b
的值是相同的。这样一个区域的长度是0,因为它不跨越任何文本。例如,一个光标位于文档中,没有选择;它表示在同一点开始和停止的选择。你知道吗您可以使用上面的构造函数构造一个区域;根据您要做的事情,您需要以不同的方式构造该区域。你知道吗
例如,可以将上面的行替换为:
它告诉Sublime用文本
te
替换从位置0开始到位置0的文本。在本例中,它将只在缓冲区的开头插入字符,因为该区域是空的(因此它将不使用任何内容替换)。你知道吗你也可以这样做:
现在该区域跨越字符0到4,因此它将替换插入的
test
,而只使用te
(即,看起来您删除了test
的最后两个字符)。你知道吗如果您的目标纯粹是删除文本,那么您需要
view.erase()
:如图所示,给
erase
方法一个区域,它将删除该区域中的所有文本。因此,如果要删除添加的文本test
,可以执行以下操作:现在这个命令的结果就好像它根本没有插入任何东西一样。你知道吗
相关问题 更多 >
编程相关推荐