插件去最后一行

时间:2013-10-29 14:07:30

标签: plugins sublimetext2 sublimetext sublimetext3

我想为sublime text 3创建插件,该插件可以移动到已打开文件的最后一行。现在我可以按其号码排队:

import sublime, sublime_plugin

class prompt_goto_lineCommand(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 go_to_lineCommand(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)

但我不知道最后一行的数量。如何从对象sublime_plugin.WindowCommand获取它?或者可能是另一种方法将光标移动到最后一行但没有得到它的数字?我试图在api documentation找到?但没有结果。

2 个答案:

答案 0 :(得分:2)

go_to_lineCommand中的代码已经向您展示了如何计算最后一个行号。 self.view.size()返回文件中的字符数。因此,self.view.rowcol(self.view.size())会返回文档中最后point的行号和列号。顺便说一句,AFAIK,point就像数组中的索引。

因此,您可以通过计算最后一个行号来到最后一行,或者只使用 0 作为行号。

view.run_command("go_to_line", {'line':'0'})

答案 1 :(得分:1)

对于那些不想专门构建插件并使用Sublime Text 3的人,您可能有兴趣学习 ctrl end 。我不太确定Sublime Text 2是否存在,以及。

正如您特别想要构建插件一样,您可以执行类似于内置Sublime Text 3命令的操作,作为go_to_line解决方案的替代方法。

{ "keys": ["ctrl+end"], "command": "move_to", "args": {"to": "eof", "extend": false} }