444 votes

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

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

enter image description here

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


Des choses que j'ai essayées :

D , K et U me permet de les sélectionner une par une, mais je dois exclure manuellement les chaînes de caractères non variables :

enter image description here

Et en utilisant CtrlG sélectionne simplement tous la chaîne de caractères correspond :

enter image description here

Il est clair que Sublime est capable de faire la différence entre les correspondances de variables et de chaînes de caractères. N'y a-t-il aucun moyen de sélectionner uniquement les correspondances de variables ?

635voto

Nolan Points 1347
  1. Placez le curseur dans la variable.

    Note : la clé est de commencer avec une sélection vide. Ne mettez pas en évidence, mais mettre votre curseur à cet endroit.

text cursor on variable

  1. Appuyez sur D au besoin. Vous n'avez pas de Mac ? Utilisez CtrlD .

more instances of variable highlighted

Ça n'a pas marché ? Essayez à nouveau, en veillant à commencer avec rien de sélectionné .

Plus de commandes :

Trouvez tout : CtrlG sélectionne toutes les occurrences en même temps. Vous n'avez pas de Mac ? AltF3

Annuler la sélection : U des pas en arrière. Pas sur un Mac ? CtrlU

Quick Skip Next : KD saute l'occurrence suivante. Pas sur un Mac ? CtrlKCtrlD

Sublime Docs

0 votes

Pour une recherche sensible à la casse : stackoverflow.com/questions/14829336/

0 votes

Comment faire avec ubuntu ?

14 votes

Comment faire cela sur un clavier non MAC ?

137voto

elaRosca Points 789

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

C'est facile à faire : AltF3 .

10 votes

Il sélectionne toujours tout ce qui a un foo à l'intérieur.

1 votes

Cette réponse est pour la question : stackoverflow.com/q/12162047/2270563 . Mais ici la question est différente. Pour ne sélectionner que les variables plutôt que toutes les correspondances.

4 votes

@user1767754 Si vous ne voulez pas sélectionner tout ce qui a foo à l'intérieur, ne sélectionnez pas déjà le premier foo . Au lieu de cela, il suffit de placer un curseur dans le mot foo et ensuite Alt-F3 . Voila

50voto

MattDMo Points 21024

Malgré de nombreux efforts, je n'ai pas trouvé de moyen intégré ou assisté par un plugin pour faire ce que vous essayez de faire. Je suis tout à fait d'accord pour dire que debe être possible, car le programme peut distinguer foo de buffoon lorsque vous le mettez en évidence pour la première fois, mais personne ne semble connaître le moyen 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 ( AltF3 sur Windows/Linux)

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

  • K , D - ignore l'instance actuelle et sélectionne l'instance 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 la fonction Rechercher et Remplacer ( CtrlE , CtrlH )

6 votes

Mais le trait n'apparaît qu'autour des occurrences de l'élément nom de la variable alors que +D agit sur toutes les occurrences de la chaîne. Par exemple, si je mets en surbrillance foo Sublime, merveilleusement frappée par toutes les variables foo mais pas la chaîne foo dans mon eject_buffoon fonction. Et pourtant, en utilisant les combinaisons de touches ci-dessus, je suis obligé de manuellement +K les correspondances de chaînes de caractères pour éviter d'avoir un eject_bufbarn fonction. Il doit y avoir un meilleur moyen !

0 votes

@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 qui le suit) ou _foo_ (avec des espaces avant et après) et ensuite utiliser -D ou Ctrl--D .

7 votes

Je pense en fait que c'est exactement la question que le PO posait. Il dit spécifiquement " variable "(et non "région de texte" ou "chaîne de caractères") et " AVC "(et non "mise en évidence"). Et cette question est no un duplicata de stackoverflow.com/questions/12162047/ - celui-là dit "sélection en surbrillance". Aussi, bien sûr, foo apparaît souvent comme (foo) , _foo, , (foo, et _foo} donc _foo_ est plutôt insatisfaisant.

21voto

hobs Points 3020

Ce site a fonctionné pour moi. Placez votre curseur au début du mot que vous voulez remplacer, puis

CtrlK , CtrlD , CtrlD ...

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

1 votes

C'est la réponse qui a fonctionné pour moi, à l'exception de celles qui ont été mentionnées. Bien !

0 votes

Cela ne répond pas à la question.

0 votes

@MD004 Comment ça ?

12voto

user1767754 Points 460

La magie, c'est que vous devez commencer par une sélection vide, donc placez votre curseur devant le mot/caractère que vous voulez multi-sélectionner et appuyez sur Ctrl + D .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X