我正在编写一个简单的插件,它可以更改 Sublime 编辑器的全部内容并用其他内容替换它。这样做时
viewRegion = sublime.Region(0, self.view.size())
everything = self.view.substr(viewRegion)
self.view.replace(edit, viewRegion, everything)
视图滚动到顶部。如何防止这种情况或恢复原始视口?
我正在编写一个简单的插件,它可以更改 Sublime 编辑器的全部内容并用其他内容替换它。这样做时
viewRegion = sublime.Region(0, self.view.size())
everything = self.view.substr(viewRegion)
self.view.replace(edit, viewRegion, everything)
视图滚动到顶部。如何防止这种情况或恢复原始视口?
事实证明,真的没有什么好办法。您可以尝试尽可能多地绕过替换(例如通过使用出色的merge_utils),但这将始终在命令完成后更改位置。
作为 hack,您可以保存位置并在超时时恢复它,如下所示:
def format(self, edit):
self.curpos = self.view.viewport_position()
self.selection = self.view.sel()[0]
viewRegion = sublime.Region(0, self.view.size())
everything = self.view.substr(viewRegion)
# do something useful
self.view.replace(edit, viewRegion, everything)
# reestablish selection
sublime.set_timeout(self.reset_pos, 0)
def reset_pos(self):
self.view.sel().clear()
self.view.sel().add(self.selection)
self.view.set_viewport_position(self.curpos, False)