146

I want to create an Eclipse style shortcut Ctrl+MouseClick to open the function/method. Sublime Text 3 has already this function called goto_definition but it is bound to F12.

But I'm not sure how to create this binding. I looked here for documentation but it was too complex. Can you one help me out with this simple key binding?

Edit: Following this article I was told to do this: http://webtempest.com/better-definition-navigation-in-sublime-text-3/

[
    {
        "button": "button1", 
        "count": 1, 
        "modifiers": ["super", "shift"],
        "press_command": "drag_select",
        "command": "goto_definition"
    }
]

This doesn't seem to work, ctrl+shift+click executes nothing.

Ulf Gjerdingen
  • 1,326
  • 3
  • 15
  • 20
Kivylius
  • 5,819
  • 11
  • 38
  • 70
  • 3
    `super` is the windows key for Windows and Linux and the command key for OS X, not control. Try that and see if you get the behavior you want. – skuroda Apr 26 '13 at 16:03

6 Answers6

251

For anyone else who wants to set Eclipse style goto definition, you need to create .sublime-mousemap file in Sublime User folder.

Windows - create Default (Windows).sublime-mousemap in %appdata%\Sublime Text 3\Packages\User

Linux - create Default (Linux).sublime-mousemap in ~/.config/sublime-text-3/Packages/User

Mac - create Default (OSX).sublime-mousemap in ~/Library/Application Support/Sublime Text 3/Packages/User

Now open that file and put the following configuration inside

[
    {
        "button": "button1", 
        "count": 1, 
        "modifiers": ["ctrl"],
        "press_command": "drag_select",
        "command": "goto_definition"
    }
]

You can change modifiers key as you like.


Since Ctrl-button1 on Windows and Linux is used for multiple selections, adding a second modifier key like Alt might be a good idea if you want to use both features:

[
    {
        "button": "button1", 
        "count": 1, 
        "modifiers": ["ctrl", "alt"],
        "press_command": "drag_select",
        "command": "goto_definition"
    }
]

Alternatively, you could use the right mouse button (button2) with Ctrl alone, and not interfere with any built-in functions.

MattDMo
  • 90,104
  • 20
  • 213
  • 210
Boris Brdarić
  • 4,494
  • 2
  • 22
  • 19
  • 5
    This seems like the correct answer, but i did everything you said and still It not working i'm `ctrl` + `click` and its not doing anything, I get an error `Unable to parse binding` – Kivylius Jun 11 '13 at 15:13
  • have you checked configuration file name? can you post error screenshot somewhere? – Boris Brdarić Jun 12 '13 at 11:35
  • Does anyone know how you'd right click for this? I was able to add to a Context.sublime-menu file the command but couldn't figure out how to pass in the args for the currently selected text...Or line...I searched for a good while trying to find documentation (and did try "args": "drag_select") but couldn't figure it out. I'd rather right click and jump to definition though this does work great! Thanks. – Tom Aug 13 '13 at 01:37
  • Could I also bind the enter key to this so I don't have to manually press it everytime i ctrl + click? – user3388884 Jul 24 '14 at 20:54
  • @BorisSamardžija , also how do i make the above script look for the function definition in my current file rather than jumping to other external files. – Alexander Solonik Dec 08 '15 at 09:53
92

To set go to definition to alt + d. From the Menu Preferences > Key Bindings-User. And then add the following JSON.

[
    { "keys": ["alt+d"], "command": "goto_definition" }
]
mbokil
  • 2,724
  • 23
  • 17
  • 1
    Not certain why I got down voted but this solution is working perfectly for me on Sublime 3. – mbokil Sep 07 '13 at 01:13
  • 9
    You probably got downvoted because the original question asked "I want to create a Eclipse style shorcut Ctrl+MouseClick to open the function/method". I found your answer useful inasmuch as I'm not interested in the mouse shortcut version, so I've upvoted. :) – Charles Roper Nov 17 '13 at 22:22
  • 1
    seems like better option than the cmd+opt+down – uday Mar 12 '15 at 14:17
  • Possible to use `button1` instead of `d`... so, we have like `"alt" + "button"` – IROEGBU Jun 02 '15 at 16:08
23

If you want to see how to do a proper definition go into Sublime Text->Preferences->Key Bindings - Default and search for the command you want to override.

{ "keys": ["f12"], "command": "goto_definition" },
{ "keys": ["super+alt+down"], "command": "goto_definition" }

Those are two that show in my Default.

On Mac I copied the second to override.

in Sublime Text -> Preferences -> Key Bindings - User I added this

/* Beginning of File */

[
    {
        "keys": ["super+shift+i"], "command": "goto_definition" 
    }
]

/* End of File */

This binds it to the Command + Shift + 1 combination on mac.

j0k
  • 21,914
  • 28
  • 75
  • 84
philcollin_us
  • 494
  • 4
  • 6
8

On a mac you have to set keybinding yourself. Simply go to

Sublime --> Preference --> Key Binding - User  

and input the following:

{ "keys": ["shift+command+m"], "command": "goto_definition" }

This will enable keybinding of Shift + Command + M to enable goto definition. You can set the keybinding to anything you would like of course.

tinlyx
  • 18,900
  • 26
  • 81
  • 148
Nick Ganguly
  • 163
  • 2
  • 8
4

ctrl != super on windows and linux machines.

If the F12 version of "Goto Definition" produces results of several files, the "ctrl + shift + click" version might not work well. I found that bug when viewing golang project with GoSublime package.

kittykitty
  • 71
  • 3
  • 1
    CMD+SHIFT+MOUSE1 does not work! what the right sintax to make click on con GoTo Definition? – Magico Jun 10 '13 at 10:29
  • @Magico Required GoSublime install and it may only work for Golang project. [GoSublime: Godoc/Goto Definition](https://github.com/DisposaBoy/GoSublime/blob/master/USAGE.md#godocgoto-definition) `ctrl+dot,ctrl+g` or `ctrl+shift+left-click` on Windows. Replace ctrl as command on Mac. – Ivan Chau Jun 24 '15 at 02:59
0

I'm using Sublime portable version (for Windows) and this (placing the mousemap in SublimeText\Packages\User folder) did not work for me.

I had to place the mousemap file in SublimeText\Data\Packages\User folder to get it to work where SublimeText is the installation directory for my portable version. Data\Packages\User is where I found the keymap file as well.

Ravi
  • 842
  • 2
  • 9
  • 18