3

私はSublime Textのプラグインを書いています。これは、とりわけカーソルをドキュメントの先頭に移動します。

ビンテージ モードには、次のようなキーバインドがあります。

{ "keys": ["g", "g"], "command": "set_motion", "args": {
    "motion": "vi_goto_line",
    "motion_args": {"repeat": 1, "explicit_repeat": true, "extend": true,
                    "ending": "bof" },
    "linewise": true },
    "context": [{"key": "setting.command_mode"}]
}

同じ効果を実現したり、プラグインから同じコマンドを呼び出すにはどうすればよいですか?

4

1 に答える 1

8

デフォルトの plugins フォルダーには、ほぼ正確にこれを行う goto_line.py というプラグインがあります。

import sublime, sublime_plugin

class PromptGotoLineCommand(sublime_plugin.WindowCommand):

    def run(self):
        self.window.show_input_panel("Goto Line:", "", self.on_done, None, None)
        pass

    def on_done(self, text):
        try:
            line = int(text)
            if self.window.active_view():
                self.window.active_view().run_command("goto_line", {"line": line} )
        except ValueError:
            pass

class GotoLineCommand(sublime_plugin.TextCommand):

    def run(self, edit, line):
        # Convert from 1 based to a 0 based line number
        line = int(line) - 1

        # Negative line numbers count from the end of the buffer
        if line < 0:
            lines, _ = self.view.rowcol(self.view.size())
            line = lines + line + 1

        pt = self.view.text_point(line, 0)

        self.view.sel().clear()
        self.view.sel().add(sublime.Region(pt))

        self.view.show(pt)
于 2012-09-28T08:10:02.567 に答える