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".
区域也可能为空,在这种情况下 a
和 b
值相同。此类区域的长度为 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
(即看起来您删除了 [=32= 的最后两个字符].
如果您的目标纯粹是删除文本,那么您需要 view.erase()
:
如此处所示,您为 erase
方法提供了一个区域,它会删除该区域中的所有文本。所以如果你想删除你添加的文本 test
,你会这样做:
self.view.erase(edit, sublime.Region(0, 4))
现在命令的结果就像它根本没有插入任何东西一样。
我是 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".
区域也可能为空,在这种情况下 a
和 b
值相同。此类区域的长度为 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
(即看起来您删除了 [=32= 的最后两个字符].
如果您的目标纯粹是删除文本,那么您需要 view.erase()
:
如此处所示,您为 erase
方法提供了一个区域,它会删除该区域中的所有文本。所以如果你想删除你添加的文本 test
,你会这样做:
self.view.erase(edit, sublime.Region(0, 4))
现在命令的结果就像它根本没有插入任何东西一样。