【问题标题】:Sublime Text - Goto line and columnSublime Text - 转到行和列
【发布时间】:2014-02-12 13:26:39
【问题描述】:

目前,Go to line 快捷键(windows/linux 中的 CTRL+G)只允许导航到特定的行。

最好允许在逗号后指定列号,例如

:30,11 转到第 30 行第 11 列

是否有任何插件或自定义脚本来实现这一点?

【问题讨论】:

标签: sublimetext sublimetext3 sublime-text-plugin


【解决方案1】:

更新 3

现在是 part of Sublime Text 3,从内部版本号 3080 开始:

除了 :line 之外,Goto Anything 还支持 :line:col 语法

例如,您可以使用:30:11 转到第 30 行第 11 列。

更新 1 - 已过时

我刚刚意识到您已将其标记为 sublime-text-3,而我正在使用 2。它可能对您有用,但我尚未在 3 中进行测试。

更新 2 - 已过时

编辑 3:已满足 package_control 存储库的所有要求。这个包现在在应用程序的包存储库中可用( install -> GotoRowCol to install )。

我也想要这个功能。可能有更好的方法来分发它,但我并没有真正投入大量时间。我非常快地阅读了一些插件开发教程,并使用了一些其他插件代码来修补这个东西。

选择菜单选项Tools -> New Plugin

将打开一个新的示例模板。将其粘贴到模板中:

import sublime, sublime_plugin


class PromptGotoRowColCommand(sublime_plugin.WindowCommand):
        def run(self, automatic = True):
                self.window.show_input_panel(
                        'Enter a row and a column',
                        '1 1',
                        self.gotoRowCol,
                        None,
                        None
                )
                pass

        def gotoRowCol(self, text):
                try:
                        (row, col) = map(str, text.split(" "))

                        if self.window.active_view():
                                self.window.active_view().run_command(
                                        "goto_row_col",
                                        {"row": row, "col": col}
                                )
                except ValueError:
                        pass


class GotoRowColCommand(sublime_plugin.TextCommand):
        def run(self, edit, row, col):
                print("INFO: Input: " + str({"row": row, "col": col}))
                # rows and columns are zero based, so subtract 1
                # convert text to int
                (row, col) = (int(row) - 1, int(col) - 1)
                if row > -1 and col > -1:
                        # col may be greater than the row length
                        col = min(col, len(self.view.substr(self.view.full_line(self.view.text_point(row, 0))))-1)
                        print("INFO: Calculated: " + str({"row": row, "col": col})) # r1.01 (->)
                        self.view.sel().clear()
                        self.view.sel().add(sublime.Region(self.view.text_point(row, col)))
                        self.view.show(self.view.text_point(row, col))
                else:
                        print("ERROR: row or col are less than zero")               # r1.01 (->)

保存文件。当“另存为”对话框打开时,它应该位于Sublime Text 2\Packages\User\ 目录中。向上导航到并创建文件夹Sublime Text 2\Packages\GotoRowCol\ 并使用名称GotoRowCol.py 保存文件。

在同一目录中创建一个新文件Sublime Text 2\Packages\GotoRowCol\GotoRowCol.sublime-commands,并以崇高的文本打开GotoRowCol.sublime-commands。将其粘贴到文件中:

[
    {
        "caption": "GotoRowCol",
        "command": "prompt_goto_row_col"
    }
]

保存文件。这应该在 sublime 文本系统中注册 GotoRowCol 插件。要使用它,请点击 ctrl + shift + p 然后输入 GotoRowCol 并点击 ENTER。 sublime 文本窗口的底部会出现一个提示,其中预先填充了两个数字,第一个是您要转到的行,第二个是列。输入您想要的值,然后点击ENTER

我知道这是一项复杂的操作,但这是我现在拥有的,并且正在为我工​​作。

【讨论】:

  • +1 非常好,创建一个 github repo 并在包管理器频道中注册它
  • 完成。请参阅我的回答中的Edit 2,ILan。
  • 感谢比尔,你做得很好!!!我只需要在您的 print("...") 语句中添加括号以使其与 Sublime Text 3 兼容;)随时升级插件!再次感谢!
  • 顺便说一句,您还可以添加有关为您的出色插件设置热键的文档,这对我有用:{ "keys": ["ctrl+g"], "command": "prompt_goto_row_col", "args": {} }
  • 嘿,@elgalu。我推送了一个新版本来纠正这个问题,并实现了 ctrl+g 功能。我在README.mg 中添加了说明,指示覆盖此热键,并说明在安装插件的情况下仍使用默认的“goto row”功能。 Link to issue view
猜你喜欢
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多