So wählen Sie alle Instanzen einer Variablen aus und bearbeiten den Variablennamen in Sublime

428

Wenn ich eine Variable (nicht irgendeine Zeichenfolge) in meinem Code auswähle , erhalten alle anderen Instanzen dieser Variablen einen Strich (weiße Kontur) um sie herum:

Geben Sie hier die Bildbeschreibung ein

Gibt es eine Tastenkombination, mit der ich alle Instanzen der Variablen auswählen und alle gleichzeitig bearbeiten kann?


Dinge, die ich versucht habe:

D, KUnd Ulässt mich sie one-by-one wählen, aber ich muss manuell die nicht-variable Zeichenfolge Einstimmungen ausschließen:

Geben Sie hier die Bildbeschreibung ein

Mit using werden CtrlGeinfach alle Zeichenfolgenübereinstimmungen ausgewählt:

Geben Sie hier die Bildbeschreibung ein

Sublime kann eindeutig zwischen Variablen- und Zeichenfolgenübereinstimmungen unterscheiden. Gibt es keine Möglichkeit, nur die Variablenübereinstimmungen auszuwählen?

Oskar Persson
quelle

Antworten:

604
  1. Setzen Sie den Cursor in die Variable.

    Hinweis: Der Schlüssel beginnt mit einer leeren Auswahl. Nicht hervorheben; Setzen Sie einfach Ihren Cursor dort.

Textcursor auf Variable

  1. Drücken Sie Dnach Bedarf. Nicht auf einem Mac? Verwenden Sie CtrlD.

Weitere Instanzen von Variablen hervorgehoben

Hat nicht funktioniert? Versuchen Sie es erneut und stellen Sie sicher, dass nichts ausgewählt ist .

Weitere Befehle:

Alle CtrlG suchen : Wählt alle Vorkommen gleichzeitig aus. Nicht auf einem Mac?AltF3

Auswahl rückgängig machen: U Schritte rückwärts. Nicht auf einem Mac?CtrlU

Schnell überspringen Weiter: KD Überspringt das nächste Vorkommen. Nicht auf einem Mac?CtrlKCtrlD

Erhabene Dokumente

Nolan Amy
quelle
14
Was ist ⌘, wie macht man das auf einer Nicht-MAC-Tastatur?
Bjarke Freund-Hansen
6
Zumindest in ST3 können Sie Strg-⌘-G ohne den anderen ⌘-D-Befehl ausführen. Es ist leider schrecklich falsch in der Speisekarte beschriftet!
Watsonic
30
Dies beantwortet nicht die ursprüngliche Frage des OP. Er fragte ausdrücklich variable (not just any string). Dadurch werden einfach alle Vorkommen der Zeichenfolge ausgewählt.
Betjamin Richards
17
@BetjaminRichards Stellen Sie sicher, dass Sie die Variable nicht auswählen (hervorheben). Bewegen Sie einfach den Cursor auf die Variable und drücken Sie dann ⌘D. Dies ist übrigens genau das Problem, das ich mit MattDMos Antwort hatte ( stackoverflow.com/a/16844924/483520 ).
Nolan Amy
2
@ MuhammadUmer Alles, was zum Wort passt, unter Berücksichtigung der Grenzen. Keine echte Variablensuche, aber viel besser als einfache Zeichenfolgenübereinstimmung.
Nolan Amy
135

Ich weiß, dass es sich bei der Frage um Macs handelt, aber ich habe hier nach der Antwort für Ubuntu gesucht, daher denke ich, dass meine Antwort für jemanden nützlich sein könnte.

Einfache Möglichkeit : AltF3.

elaRosca
quelle
10
Es wählt immer noch alles aus, was Foo enthält.
user1767754
1
Diese Antwort bezieht sich auf die Frage: stackoverflow.com/q/12162047/2270563 . Aber hier ist die Frage anders. Nur die Variablen und nicht alle Übereinstimmungen auswählen.
Ram
4
@ user1767754 Wenn Sie nicht alles auswählen möchten, was sich darin befindet foo, wählen Sie nicht bereits das erste aus foo. Setzen Sie stattdessen einfach einen Cursor in das Wort foound dann Alt-F3. Voila
Anwar
Diese Antwort ist falsch. Dadurch werden alle Instanzen ausgewählt, foonicht nur die hervorgehobenen.
André C. Andersen
Funktioniert nicht in KDE, daher habe ich der Schlüsselbindungsdatei {"keys": ["alt + d"], "command": "find_all_under"} hinzugefügt: Preferences> Key BIndings. alt + d scheint dort nichts zu widersprechen.
user1985553
47

Trotz großer Anstrengungen habe ich keine integrierte oder Plugin-unterstützte Methode gefunden, um das zu tun, was Sie versuchen. Ich stimme voll und ganz , dass es sollte möglich sein, da das Programm unterscheiden kann fooaus , buffoonwenn Sie es zuerst markieren, aber niemand scheint eine Art und Weise zu tun , es zu wissen.


Hier sind jedoch einige nützliche Tastenkombinationen für die Auswahl von Wörtern in Sublime Text 2:

CtrlG- wählt alle Vorkommen des aktuellen Wortes aus ( AltF3unter Windows / Linux)

D- wählt die nächste Instanz des aktuellen Wortes aus ( CtrlD)

  • K, D- überspringt die aktuelle Instanz und wählt die nächste aus ( CtrlK, CtrlD)
  • U- "Soft Undo", kehrt zur vorherigen Auswahl zurück ( CtrlU)

E, H- verwendet die aktuelle Auswahl als Feld "Suchen" in Suchen und Ersetzen ( CtrlE, CtrlH)

MattDMo
quelle
6
Der Strich wird jedoch nur um Vorkommen des Variablennamens angezeigt , während er ⌘+Dauf alle Vorkommen des Strings wirkt. Wenn ich zum Beispiel hervorhole foo, streicht sublime wunderbar alle Variablen foos, aber nicht die Zeichenfolge fooin meiner eject_buffoonFunktion. Und dennoch bin ich gezwungen, mithilfe der obigen Tastenkombinationen ⌘+Kdie Zeichenfolgenübereinstimmungen manuell auszugeben, um eine eject_bufbarnFunktion zu vermeiden . Es muss einen besseren Weg geben!
Nolan Amy
@ Nolan - zögern Sie nicht , eine Frage zu stellen und zu sehen, ob jemand Vorschläge hat. Eine mögliche Problemumgehung besteht darin, foo_(foo und das Leerzeichen danach) oder _foo_(Leerzeichen vor und nach) auszuwählen und dann ⌘-Doder zu verwenden Ctrl-⌘-D.
MattDMo
7
Ich denke tatsächlich, dass dies genau die Frage ist, die das OP gestellt hat. Er sagt ausdrücklich " Variable " (nicht "Textbereich" oder "Zeichenfolge") und " Strich " (nicht "Hervorheben"). Und diese Frage ist kein Duplikat von stackoverflow.com/questions/12162047/… - diese sagt "hervorgehobene Auswahl". Auch, natürlich, foozeigt oft auf , als (foo), _foo,, (foo,, und _foo}, so _foo_ziemlich unbefriedigend ist.
Nolan Amy
21

Das hat bei mir funktioniert. Setzen Sie den Cursor dann an den Anfang des Wortes, das Sie ersetzen möchten

CtrlK, CtrlD, CtrlD...

Das sollte so viele Instanzen des Wortes auswählen, wie Sie möchten, dann können Sie einfach den Ersatz eingeben.

Kochfelder
quelle
1
Dies war die Antwort, die für mich funktioniert hat, abgesehen von der Antwort, die erwähnt wurde. Gut !
Akash
Dies beantwortet die Frage nicht.
MD004
@ MD004 Wie so?
Kochfelder
@hobs Die Frage ist, wie man "alle diese Instanzen auswählt" auf einmal . Ich gebe zu, dass die Formulierung der Frage im Titel nicht eindeutig ist, aber später im Beitrag beschreibt das OP Ihre Lösung und sagt, dass dies "sie einzeln auswählt, aber ich muss die nicht variablen Zeichenfolgenübereinstimmungen manuell ausschließen "was unbefriedigend ist. Übrigens ist ein Beispielszenario, in dem dies unbefriedigend ist, beispielsweise, dass das Wort, das Sie ersetzen möchten, 1000 Mal vorkommt. In diesem Fall ist eine manuelle Auswahl nicht möglich.
MD004
1
Ahh, ich verstehe. Vielen Dank. Jetzt verstehe ich, warum die akzeptierte Antwort für die Situation des OP und Ihr Beispiel mit 1000 Vorkommen viel besser ist.
Kochfelder
12

Die Magie ist, dass Sie mit einer leeren Auswahl beginnen müssen. Stellen Sie den Cursor also vor das Wort / Zeichen, das Sie mehrfach auswählen möchten, und drücken Sie Ctrl+ D.

user1767754
quelle
2
Dies ist die Antwort für Variablen mit einzelnen Zeichen. Bei allen anderen Variablen können Sie den Cursor zunächst an einer beliebigen Stelle in der Variablen platzieren.
manish_s
Dies funktioniert für mich in Sublime 3 und ist der einfachste Weg, dies zu tun, wenn Sie die Änderungen auf einen kleineren Bereich wie innerhalb einer Funktion im Gegensatz zur gesamten Datei beschränken möchten. Command-D für macOS natürlich.
Ryan H.
10

Für mich ist dies der größte Fehler in Sublime. Alt+ F3ist schwer zu erreichen / zu merken und Ctrl+ Shift+ Gmacht keinen Sinn, wenn man bedenkt, dass Ctrl+ D"nächste Instanz zur Auswahl hinzufügen" ist.

Fügen Sie dies Ihren Benutzerschlüsselbindungen hinzu (Einstellungen> Schlüsselbindungen):

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

Jetzt können Sie etwas markieren, Ctrl+ Shift+ drücken Dund jede andere Instanz in der Datei zur Auswahl hinzufügen.

Travis Heeter
quelle
1
Dies ist die einzige Antwort, die tatsächlich die ursprüngliche Frage beantwortet!
kmundnic
Wählt
4

Es ist von @watsonic erwähnt , dass in Sublime Text 3 auf Mac OS, mit einem Start leere Auswahl , einfach G( AltF3unter Windows) funktioniert der Trick, statt D+ Gin Sublime Text 2.

Franklin Yu
quelle
4

Wie der Benutzer 1767754 sagte, besteht der Schlüssel hier darin, zunächst keine Auswahl zu treffen.

Platzieren Sie den Cursor einfach innerhalb des Variablennamens und doppelklicken Sie nicht, um ihn auszuwählen. Platzieren Sie bei Einzelzeichenvariablen den Cursor am Anfang oder Ende der Variablen, um zunächst keine Auswahl zu treffen.

Drücken Sie nun Cmd+ Dfür die nächste Variablenauswahl oder Ctrl+ Cmd+ Gfür die gleichzeitige Auswahl aller Variablen. Es werden nur die Variablen auf magische Weise ausgewählt.

manish_s
quelle
0

Nur für den Fall, dass jemand anderes auf diese Frage gestoßen ist, während er nach einer Möglichkeit gesucht hat, eine Zeichenfolge über mehrere Dateien hinweg zu ersetzen, ist dies Command+ Shift+F

Jay
quelle