Como selecionar todas as instâncias de uma variável e editar o nome da variável no Sublime


428

Se eu selecionar uma variável (não apenas uma string) no meu código, todas as outras instâncias dessa variável receberão um traço (contorno branco) em torno delas:

insira a descrição da imagem aqui

Existe um atalho de teclado que permita selecionar todas as instâncias da variável e editá-las todas de uma vez?


Coisas que eu tentei:

D, KE Ume permite selecioná-los um por um, mas eu tenho que excluir manualmente os jogos de cordas não variáveis:

insira a descrição da imagem aqui

E usar CtrlGsimplesmente seleciona todas as correspondências de seqüência de caracteres:

insira a descrição da imagem aqui

Claramente, o Sublime é capaz de diferenciar entre correspondências de variáveis ​​e seqüências de caracteres. Não há como selecionar apenas as correspondências de variáveis?

Respostas:


604
  1. Coloque o cursor na variável.

    Nota: a chave é começar com uma seleção vazia. Não destaque; basta colocar o cursor lá.

cursor de texto na variável

  1. Pressione Dconforme necessário. Não está em um Mac? Use CtrlD.

mais instâncias da variável destacada

Não funcionou? Tente novamente, certificando-se de começar com nada selecionado .

Mais comandos:

Localizar tudo: CtrlG seleciona todas as ocorrências de uma só vez. Não está em um Mac?AltF3

Desfazer seleção: U retrocede. Não está em um Mac?CtrlU

Quick Skip Next: KD pula a próxima ocorrência. Não está em um Mac?CtrlKCtrlD

Documentos sublimes


14
O que é ⌘, como você faz isso em um teclado não-MAC?
Bjarke Freund-Hansen

6
pelo menos no ST3, você pode executar Ctrl-⌘-G sem o outro comando ⌘-D. Infelizmente, está terrivelmente errado no menu!
watsonic

30
Isso não responde à pergunta original do OP. Ele perguntou especificamente variable (not just any string). Isso simplesmente seleciona todas as ocorrências da sequência.
Betjamin Richards

17
@BetjaminRichards Verifique se você não está selecionando (realçando) a variável. Apenas mova o cursor para a variável e pressione pressD. Aliás, esse é exatamente o problema que tive com a resposta do MattDMo ( stackoverflow.com/a/16844924/483520 ).
Nolan Amy

2
@MuhammadUmer Qualquer coisa que corresponda à palavra, levando em consideração os limites. Não é uma verdadeira pesquisa de variáveis, mas muito melhor que a simples correspondência de cadeias.
Nolan Amy

135

Eu sei que a pergunta é sobre Macs, mas cheguei aqui procurando a resposta para o Ubuntu, então acho que minha resposta pode ser útil para alguém.

Fácil maneira de fazê-lo: AltF3.


10
ainda está selecionando tudo o que tem dentro.
precisa saber é o seguinte

1
Esta resposta é para a pergunta: stackoverflow.com/q/12162047/2270563 . Mas aqui a questão é diferente. Para selecionar apenas as variáveis ​​em vez de todas as correspondências.
Ram

4
@ user1767754 Se você não quiser selecionar tudo o que tem foodentro, ainda não selecione o primeiro foo. Em vez disso, basta colocar um cursor na palavra fooe depois Alt-F3. Voila
Anwar

Esta resposta está errada. Isso selecionará todas as instâncias, foonão apenas as destacadas.
André C. Andersen

Não funciona no KDE, então acabei de adicionar {"keys": ["alt + d"], "command": "find_all_under"} ao arquivo de combinações de teclas: Preferências> Key BIndings. alt + d parece não entrar em conflito com nada lá.
User1985553

47

Apesar de muito esforço, não encontrei uma maneira integrada ou assistida por plug-in para fazer o que você está tentando fazer. Concordo plenamente que deve ser possível, como o programa pode distinguir fooentre buffoonquando você realçá-lo, mas ninguém parece saber uma maneira de fazê-lo.


No entanto, aqui estão algumas combinações de teclas úteis para selecionar palavras no Sublime Text 2:

CtrlG- seleciona todas as ocorrências da palavra atual ( AltF3no Windows / Linux)

D- seleciona a próxima instância da palavra atual ( CtrlD)

  • K, D- pula a instância atual e continua para selecionar a próxima ( CtrlK, CtrlD)
  • U- "desfazer suave", volta para a seleção anterior ( CtrlU)

E, H- usa a seleção atual como o campo "Localizar" em Localizar e substituir ( CtrlE, CtrlH)


6
Mas o traço aparece apenas em torno das ocorrências do nome da variável , enquanto ⌘+Datua em todas as ocorrências da sequência. Por exemplo, se eu destacar foo, sublime maravilhosamente afaga todas as variáveis foos, mas não a string fooem minha eject_buffoonfunção. E, no entanto, usando as combinações de teclas acima, sou forçado a ⌘+Kespecificar manualmente as correspondências de string para evitar ter uma eject_bufbarnfunção. Deve haver uma maneira melhor!
Nolan Amy

@ Nolan - fique à vontade para fazer uma pergunta e ver se alguém tem alguma sugestão. Uma solução possível é selecionar foo_(foo e o espaço a seguir) ou _foo_(espaços antes e depois) e depois usar ⌘-Dou Ctrl-⌘-D.
precisa saber é o seguinte

7
Na verdade, acho que essa é exatamente a pergunta que o OP estava fazendo. Ele diz especificamente " variável " (não "região de texto" ou "string") e " traço " (não "destaque"). E esta pergunta não é uma duplicata de stackoverflow.com/questions/12162047/… - que diz "seleção destacada". Além disso, é claro, foomuitas vezes mostra-se como (foo), _foo,, (foo,, e _foo}, por isso, _foo_é bastante insatisfatória.
Nolan Amy

21

Isso funcionou para mim. Coloque o cursor no início da palavra que deseja substituir e, em seguida,

CtrlK, CtrlD, CtrlD...

Isso deve selecionar quantas instâncias da palavra você desejar, basta digitar a substituição.


1
Essa foi a resposta que funcionou para mim, além da resposta mencionada. Boa !
Akash

Isso não responde à pergunta.
MD004 30/07/19

@ MD004 Como assim?
Hobs

@ hobs A questão é como "selecionar todas essas instâncias" de uma só vez . Admito que a redação da pergunta no título é ambígua, mas mais tarde no post o OP descreve sua solução e diz que isso "os seleciona um por um, mas tenho que excluir manualmente as correspondências de sequência não variáveis "o que é insatisfatório. Aliás, um exemplo de cenário em que isso é insatisfatório é quando existem, digamos, 1000 ocorrências da palavra que você deseja substituir; nesse caso, selecioná-las manualmente não é uma opção.
MD004

1
Ahh, entendi. Obrigado. Agora vejo por que a resposta aceita é muito melhor para a situação do OP e seu exemplo de 1000 ocorrências.
hobs

12

A mágica é que você precisa começar com uma seleção vazia, então coloque o cursor na frente da palavra / caractere que deseja selecionar e pressione Ctrl+ D.


2
Esta é a resposta para variáveis ​​de caracteres únicos. Para qualquer outra variável, você pode colocar o cursor em qualquer lugar da variável para começar.
precisa saber é

Isso funciona para mim no Sublime 3 e é a maneira mais simples de fazer isso, se você quiser limitar as alterações a uma área menor, como dentro de uma função, em oposição a todo o arquivo. Command-D para macOS, é claro.
Ryan H.

10

Para mim, este é o maior erro do Sublime. Alt+ F3é difícil de alcançar / lembrar, e Ctrl+ Shift+ Gnão faz sentido, considerando que Ctrl+ Dé "adicionar próxima instância à seleção".

Adicione isso às suas associações de teclas do usuário (Preferências> Associações de teclas):

{ "keys": ["ctrl+shift+d"], "command": "find_all_under" },

Agora você pode realçar algo, pressione Ctrl+ Shift+ De ele adicionará todas as outras instâncias do arquivo à seleção.


1
Esta é a única resposta que realmente responde à pergunta original!
kmundnic

Ainda seleciona strings e comentários
Wassadamo 27/09/18

4

É mencionado por @watsonic que em Sublime Texto 3 no Mac OS, começando com uma seleção vazia , simplesmente G( AltF3no Windows) faz o truque, em vez de D+ Gem Sublime Text 2.


4

Como user1767754 disse, a chave aqui é não fazer nenhuma seleção inicialmente.

Basta colocar o cursor dentro do nome da variável, não clique duas vezes para selecioná-lo. Para variáveis ​​de caractere único, coloque o cursor na frente ou no final da variável para não fazer nenhuma seleção inicialmente.

Agora continue pressionando Cmd+ Dpara a próxima seleção de variável ou Ctrl+ Cmd+ Gpara selecionar todas as variáveis ​​de uma só vez. Ele selecionará magicamente apenas as variáveis.


0

No caso de alguém mais se deparar com essa pergunta enquanto procura uma maneira de substituir uma string em vários arquivos, é Command+ Shift+F

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.