Sublime Text - Goto line and column

前端 未结 1 829
予麋鹿
予麋鹿 2021-02-01 02:18

Currently, the Go to line shortcut (CTRL+G in windows/linux) only allows to navigate to a specific line.

It would be nice to optionally allow the column number to be spe

1条回答
  •  后悔当初
    2021-02-01 02:50

    Update 3

    This is now part of Sublime Text 3 starting in build number 3080:

    Goto Anything supports :line:col syntax in addition to :line

    For example, you can use :30:11 to go to line 30, column 11.

    Update 1 - outdated

    I just realized you've tagged this as sublime-text-3 and I'm using 2. It may work for you, but I haven't tested in 3.

    Update 2 - outdated

    • Added some sanity checks and some modifications to GotoRowCol.py
    • Created github repo sublimetext2-GotoRowCol
    • Forked and submitted a pull request to commit addition to package_control_channel

    Edit 3: all requirements of the package_control repo have been met. this package is now available in the package repository in the application ( install -> GotoRowCol to install ).

    I too would like this feature. There's probably a better way to distribute this but I haven't really invested a lot of time into it. I read through some plugin dev tutorial really quick, and used some other plugin code to patch this thing together.

    Select the menu option Tools -> New Plugin

    A new example template will open up. Paste this into the template:

    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 (->)
    

    Save the file. When the "Save As" dialog opens, it should be in the the Sublime Text 2\Packages\User\ directory. Navigate up one level to and create the folder Sublime Text 2\Packages\GotoRowCol\ and save the file with the name GotoRowCol.py.

    Create a new file in the same directory Sublime Text 2\Packages\GotoRowCol\GotoRowCol.sublime-commands and open GotoRowCol.sublime-commands in sublime text. Paste this into the file:

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

    Save the file. This should register the GotoRowCol plugin in the sublime text system. To use it, hit ctrl + shift + p then type GotoRowCol and hit ENTER. A prompt will show up at the bottom of the sublime text window with two number prepopulated, the first one is the row you want to go to, the second one is the column. Enter the values you desire, then hit ENTER.

    I know this is a complex operation, but it's what I have right now and is working for me.

    0 讨论(0)
提交回复
热议问题