Sublime 3 - Definir mapa de teclas para a função Goto Definition


143

Eu quero criar um atalho de estilo do Eclipse Ctrl+ MouseClickpara abrir a função / método. O Texto Sublime 3 já tem essa função chamada, goto_definitionmas está vinculada a F12.

Mas não sei como criar essa ligação. Procurei aqui documentação, mas era muito complexa. Você pode me ajudar com essa ligação simples de chave?

Edit: Após este artigo, fui informado para fazer isso: http://webtempest.com/better-definition-navigation-in-sublime-text-3/

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

Isso não parece funcionar, ctrl+ shift+ clicknão executa nada.


3
superé a chave do Windows para Windows e Linux e a chave de comando do OS X, não de controle. Tente isso e veja se você consegue o comportamento que deseja.
Skuroda

Respostas:


244

Para qualquer pessoa que queira definir o estilo Eclipse para definir definição, é necessário criar um .sublime-mousemaparquivo na Userpasta Sublime .

Windows - criar Default (Windows).sublime-mousemapem%appdata%\Sublime Text 3\Packages\User

Linux - criar Default (Linux).sublime-mousemapem~/.config/sublime-text-3/Packages/User

Mac - criar Default (OSX).sublime-mousemapem~/Library/Application Support/Sublime Text 3/Packages/User

Agora abra esse arquivo e coloque a seguinte configuração dentro

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

Você pode alterar a modifierstecla conforme desejar.


Como Ctrl- button1no Windows e Linux é usado para várias seleções, adicionar uma segunda chave modificadora Altpode ser uma boa idéia se você deseja usar os dois recursos:

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

Como alternativa, você pode usar o botão direito do mouse ( button2) Ctrlsozinho, e não interferir em nenhuma função interna.


4
Esta parece ser a resposta correta, mas eu fiz tudo o que disse e ainda não está funcionando eu sou ctrl+ clicke seu nada não fazer, eu recebo um erroUnable to parse binding
Kivylius

você verificou o nome do arquivo de configuração? você pode postar uma captura de tela de erro em algum lugar?
Boris Brdarić

Alguém sabe como você clicaria com o botão direito? Eu era capaz de adicionar a um arquivo de menu Context.sublime o comando, mas não conseguia descobrir como passar os argumentos para o texto selecionado atualmente ... Ou linha ... Pesquisei um pouco enquanto tentava encontrar documentação (e tentou "args": "drag_select"), mas não conseguiu descobrir. Prefiro clicar com o botão direito e pular para a definição, embora isso funcione muito bem! Obrigado.
Tom

Eu também poderia vincular a tecla Enter a isso, para não precisar pressioná-la manualmente sempre que clicar com a tecla Ctrl pressionada?
user3388884

@ BorisSamardžija, também como faço para o script acima procurar a definição de função no meu arquivo atual, em vez de pular para outros arquivos externos.
Alexander Solonik

90

Para definir, vá para a definição para alt + d. No menu Preferências> Key Bindings-User. E, em seguida, adicione o seguinte JSON.

[
    { "keys": ["alt+d"], "command": "goto_definition" }
]

1
Não certo porque eu desci votou mas esta solução está funcionando perfeitamente para mim em Sublime 3.
mbokil

9
Você provavelmente recebeu voto negativo porque a pergunta original perguntou "Eu quero criar um atalho no estilo Eclipse Ctrl + MouseClick para abrir a função / método". Achei sua resposta útil, pois não estou interessada na versão de atalho do mouse, por isso votei de novo. :)
Charles Roper

1
parece ser a melhor opção do que o cmd + opt + down
uday 12/03

Possível usar em button1vez de d... então, nós temos como"alt" + "button"
IROEGBU 2/15

22

Se você quiser ver como fazer uma definição adequada, entre em Sublime Text-> Preferences-> Key Bindings - Default e pesquise o comando que deseja substituir.

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

Esses são dois que aparecem no meu padrão.

No Mac, copiei o segundo para substituir.

em Sublime Text -> Preferences -> Key Bindings - User Adicionei este

/* Beginning of File */

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

/* End of File */

Isso o vincula à combinação Command + Shift + 1 no mac.


6

Em um mac, é necessário definir a combinação de teclas. Simplesmente vá para

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

e insira o seguinte:

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

Isso ativará Shift + Command + Ma combinação de teclas para ativar a definição de goto. Você pode definir a combinação de teclas como desejar.


4

ctrl! = super em máquinas Windows e Linux.

Se a versão F12 de "Goto Definition" produz resultados de vários arquivos, a versão "ctrl + shift + click" pode não funcionar bem. Encontrei esse bug ao visualizar o projeto golang com o pacote GoSublime.


1
CMD + SHIFT + MOUSE1 não funciona! qual é a sintaxe certa para clicar com a definição GoTo?
Magico

@Magico Requer a instalação do GoSublime e pode funcionar apenas para o projeto Golang. GoSublime: Godoc / Goto Definition ctrl+dot,ctrl+g ou ctrl+shift+left-clickno Windows. Substitua ctrl como comando no Mac.
Ivan Chau

0

Estou usando a versão portátil Sublime (para Windows) e esta (colocando o mousemap em SublimeText\Packages\User pasta) não funcionou para mim.

Eu tive que colocar o arquivo mousemap na SublimeText\Data\Packages\Userpasta para fazê-lo funcionar onde SublimeTextestá o diretório de instalação da minha versão portátil. Data\Packages\Userfoi onde encontrei o arquivo keymap também.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.