0

Sublime エディターのコンテンツ全体を変更し、それを別のものに置き換える単純なプラグインを作成しています。これを行うとき

viewRegion = sublime.Region(0, self.view.size())  
everything = self.view.substr(viewRegion)
self.view.replace(edit, viewRegion, everything)

ビューが一番上にスクロールします。これを防ぐ、または元のビューポートを復元するにはどうすればよいですか?

4

1 に答える 1

1

結局のところ、良い方法はありません。可能な限り置換を回避することを試みることができます (たとえば、優れたmerge_utilsを使用することにより) が、これはコマンドが終了した後に常に位置を変更します。

ハックとして、位置を保存し、次のようにタイムアウトで復元できます。

  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)
于 2013-10-08T15:48:06.883 に答える