Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sublime Text - Goto line and column

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 specified after comma, e.g.

:30,11 to go to line 30, column 11

Is there any plugin or custom script to achieve this?

like image 901
Leo Gallucci Avatar asked Jan 22 '14 13:01

Leo Gallucci


People also ask

How do you go to a specific line in Sublime Text?

In Sublime Text, you can quickly jump to any line in the code. Hit Ctrl–G (Mac and Windows). Type in a line number and hit Return/Enter to go to that line.

How do I select a column in Sublime Text?

Using the MouseDragging with the middle button / mouse wheel will do a column selection. You can use Ctrl and Alt with this too. Shift+Right mouse button is an alternative way to initial a column select. Dragging in the gutter (where the line numbers are), will select entire lines at once.

How do you edit multiple lines in Sublime Text?

Alternatively you can select lines and go to SELECTION MENU >> SPLIT INTO LINES. Now you can edit multiple lines, move cursors etc. for all selected lines.


1 Answers

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.

like image 190
Bill Stidham Avatar answered Oct 19 '22 20:10

Bill Stidham