Comment sélectionner toutes les instances d'une variable et modifier le nom de la variable dans Sublime

428

Si je sélectionne une variable (pas n'importe quelle chaîne) dans mon code, toutes les autres instances de cette variable obtiennent un trait (contour blanc) autour d'elles:

entrez la description de l'image ici

Existe-t-il un raccourci clavier qui me permettra de sélectionner toutes ces instances de la variable et de les modifier toutes en même temps?


Choses que j'ai essayées:

D, KEt Ume permet de les sélectionner un par un, mais je dois exclure manuellement les matchs de chaîne non variables:

entrez la description de l'image ici

Et l'utilisation CtrlGsélectionne simplement toutes les correspondances de chaînes:

entrez la description de l'image ici

De toute évidence, Sublime est capable de différencier les correspondances de variables et de chaînes. N'y a-t-il aucun moyen de sélectionner uniquement les correspondances de variables?

Oskar Persson
la source

Réponses:

604
  1. Placez le curseur dans la variable.

    Remarque: la clé est de commencer avec une sélection vide. Ne mettez pas en évidence; placez simplement votre curseur là-bas.

curseur texte sur variable

  1. Appuyez Dau besoin. Pas sur un Mac? Utilisez CtrlD.

plus d'instances de variable mises en évidence

Ça n'a pas marché? Réessayez en vous assurant de commencer avec rien de sélectionné .

Plus de commandes:

Rechercher tout: CtrlG sélectionne toutes les occurrences à la fois. Pas sur un Mac?AltF3

Annuler la sélection: U recule. Pas sur un Mac?CtrlU

Saut rapide suivant: KD saute la prochaine occurrence. Pas sur un Mac?CtrlKCtrlD

Sublime Docs

Nolan Amy
la source
14
Qu'est-ce que ⌘, comment procédez-vous sur un clavier non MAC?
Bjarke Freund-Hansen
6
au moins dans ST3, vous pouvez faire Ctrl-⌘-G sans l'autre commande ⌘-D. C'est terriblement mal étiqueté dans le menu malheureusement!
watsonic le
30
Cela ne répond pas à la question initiale du PO. Il a spécifiquement demandé variable (not just any string). Cela sélectionne simplement toutes les occurrences de la chaîne.
Betjamin Richards
17
@BetjaminRichards Assurez-vous de ne pas sélectionner (surligner) la variable. Déplacez simplement le curseur sur la variable, puis appuyez sur ⌘D. Soit dit en passant, c'est exactement le problème que j'ai eu avec la réponse de MattDMo ( stackoverflow.com/a/16844924/483520 ).
Nolan Amy
2
@MuhammadUmer Tout ce qui correspond au mot, en tenant compte des limites. Pas une vraie recherche de variables, mais bien meilleure qu'une simple correspondance de chaînes.
Nolan Amy
135

Je sais que la question concerne les Mac, mais je suis arrivé ici en cherchant la réponse pour Ubuntu, donc je suppose que ma réponse pourrait être utile à quelqu'un.

Un moyen facile de le faire: AltF3.

elaRosca
la source
10
il sélectionne toujours tout ce qui a foo à l'intérieur.
user1767754
1
Cette réponse est pour la question: stackoverflow.com/q/12162047/2270563 . Mais ici, la question est différente. Pour sélectionner uniquement les variables plutôt que toutes les correspondances.
Ram
4
@ user1767754 Si vous ne voulez pas sélectionner tout ce qu'il y a à l' foointérieur, ne sélectionnez pas déjà le premier foo. Au lieu de cela, placez simplement un curseur dans le mot foo, puis Alt-F3. Voila
Anwar
Cette réponse est fausse. Cela sélectionnera toutes les instances, foopas seulement celles en surbrillance.
André C. Andersen
Ne fonctionne pas dans KDE, j'ai donc simplement ajouté {"keys": ["alt + d"], "command": "find_all_under"} au fichier de raccourcis clavier: Préférences> Key BIndings. alt + d ne semble pas entrer en conflit avec quoi que ce soit là-bas.
user1985553
47

Malgré beaucoup d'efforts, je n'ai pas trouvé de moyen intégré ou assisté par plugin pour faire ce que vous essayez de faire. Je suis entièrement d' accord qu'il devrait être possible, le programme peut distinguer foode buffoonquand vous mettez en évidence, mais personne ne semble savoir d' une façon de le faire.


Cependant, voici quelques combinaisons de touches utiles pour sélectionner des mots dans Sublime Text 2:

CtrlG- sélectionne toutes les occurrences du mot courant ( AltF3sous Windows / Linux)

D- sélectionne l'instance suivante du mot courant ( CtrlD)

  • K, D- ignore l'instance actuelle et sélectionne la suivante ( CtrlK, CtrlD)
  • U- "soft undo", revient à la sélection précédente ( CtrlU)

E, H- utilise la sélection actuelle comme champ "Rechercher" dans Rechercher et remplacer ( CtrlE, CtrlH)

MattDMo
la source
6
Mais le trait n'apparaît que autour des occurrences du nom de variable , tandis qu'il ⌘+Dagit sur toutes les occurrences de la chaîne. Par exemple, si je souligne foo, sublime caresse à merveille toutes les variables foos, mais pas la chaîne foodans ma eject_buffoonfonction. Et pourtant, en utilisant les combinaisons de touches ci-dessus, je suis obligé de ⌘+Ksupprimer manuellement les correspondances de chaîne pour éviter d'avoir une eject_bufbarnfonction. Il doit y avoir une meilleure façon!
Nolan Amy
@Nolan - n'hésitez pas à poser une question et à voir si quelqu'un a des suggestions. Une solution de contournement possible consiste à sélectionner foo_(foo et l'espace après) ou _foo_(espaces à la fois avant et après), puis d'utiliser ⌘-Dou Ctrl-⌘-D.
MattDMo
7
En fait, je pense que c'est exactement la question que posait le PO. Il dit spécifiquement " variable " (pas "zone de texte" ou "chaîne") et " trait " (pas "surlignage"). Et cette question n'est pas un doublon de stackoverflow.com/questions/12162047/… - celle-là dit "sélection en surbrillance". En outre, bien sûr, foomontre souvent que (foo), _foo,, (foo,et _foo}, donc _foo_est assez peu satisfaisante.
Nolan Amy
21

Cela a fonctionné pour moi. Placez votre curseur au début du mot que vous souhaitez remplacer, puis

CtrlK, CtrlD,CtrlD ...

Cela devrait sélectionner autant d'instances du mot que vous le souhaitez, puis vous pouvez simplement taper le remplacement.

plaques de cuisson
la source
1
C'était la réponse qui a fonctionné pour moi à part la réponse qui a été mentionnée. Bien !
Akash
Cela ne répond pas à la question.
MD004
@ MD004 Comment ça?
plaques de cuisson
@hobs La question est de savoir comment "sélectionner toutes ces instances" à la fois . J'admets que la formulation de la question dans le titre est ambiguë, mais plus tard dans le post, l'OP décrit votre solution et dit que cela "les sélectionne une par une, mais je dois exclure manuellement les correspondances de chaînes non variables "ce qui n'est pas satisfaisant. Btw, un exemple de scénario où cela n'est pas satisfaisant, c'est quand il y a, disons, 1000 occurrences du mot que vous souhaitez remplacer, auquel cas les sélectionner manuellement n'est pas une option.
MD004
1
Ahh je vois. Je vous remercie. Maintenant, je vois pourquoi la réponse acceptée est bien meilleure pour la situation du PO et votre exemple de 1000 occurrences.
plaques
12

La magie est, vous devez commencer avec une sélection vide, alors placez votre curseur devant le mot / caractère que vous souhaitez sélectionner et appuyez sur Ctrl+ D.

user1767754
la source
2
Ceci est la réponse pour les variables de caractères uniques. Pour toute autre variable, vous pouvez placer le curseur n'importe où dans la variable pour commencer.
manish_s
Cela fonctionne pour moi dans Sublime 3 et est le moyen le plus simple de le faire si vous souhaitez limiter les modifications à une zone plus petite, comme dans une fonction, par opposition à l'ensemble du fichier. Command-D pour macOS, bien sûr.
Ryan H.
10

Pour moi, c'est la plus grosse erreur de Sublime. Alt+ F3est difficile à atteindre / à retenir, et Ctrl+ Shift+ Gn'a aucun sens si l'on considère Ctrl+D est "ajouter la prochaine instance à la sélection".

Ajoutez ceci à vos raccourcis clavier utilisateur (Préférences> Liaisons clavier):

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

Maintenant, vous pouvez mettre en surbrillance quelque chose, appuyez sur Ctrl+ Shift+ D, et il ajoutera toutes les autres instances du fichier à la sélection.

Travis Heeter
la source
1
C'est la seule réponse qui répond réellement à la question d'origine!
kmundnic
Sélectionne toujours les chaînes et les commentaires
Wassadamo
4

Il est mentionné par @watsonic que dans Sublime Text 3 sur Mac OS, en commençant par une sélection vide , il suffit G( AltF3sous Windows) de faire l'affaire, au lieu de D+ Gdans Sublime Text 2.

Franklin Yu
la source
4

Comme l'a dit user1767754, la clé ici est de ne faire aucune sélection au départ.

Placez simplement le curseur à l'intérieur du nom de la variable, ne double-cliquez pas pour le sélectionner. Pour les variables à caractère unique, placez le curseur à l'avant ou à la fin de la variable pour ne faire aucune sélection initialement.

Continuez maintenant à appuyer sur Cmd+ Dpour la sélection de variable suivante ou Ctrl+ Cmd+ Gpour sélectionner toutes les variables à la fois. Il sélectionnera comme par magie uniquement les variables.

manish_s
la source
0

Au cas où quelqu'un d'autre serait tombé sur cette question en cherchant un moyen de remplacer une chaîne dans plusieurs fichiers, c'est Command+ Shift+F

Geai
la source