Jak wybrać wszystkie wystąpienia zmiennej i edytować nazwę zmiennej w Sublime

428

Jeśli wybiorę zmienną (nie tylko ciąg znaków) w moim kodzie, wszystkie inne wystąpienia tej zmiennej zostaną obrysowane (biały kontur) wokół nich:

wprowadź opis zdjęcia tutaj

Czy istnieje skrót klawiaturowy, który pozwoli mi wybrać wszystkie te wystąpienia zmiennej i edytować je wszystkie naraz?


Rzeczy, które próbowałem:

D, Ki Upozwala mi wybierać je jeden po drugim, ale muszę ręcznie wykluczyć niezmienne ciągi znaków:

wprowadź opis zdjęcia tutaj

A użycie CtrlGpo prostu wybiera wszystkie pasujące ciągi:

wprowadź opis zdjęcia tutaj

Najwyraźniej Sublime potrafi rozróżniać dopasowania zmiennych i ciągów. Czy nie ma sposobu, aby wybrać tylko dopasowania zmiennych?

Oskar Persson
źródło

Odpowiedzi:

604
  1. Umieść kursor w zmiennej.

    Uwaga: kluczem jest rozpoczęcie od pustego wyboru. Nie zaznaczaj; po prostu umieść tam kursor.

kursor tekstowy na zmiennej

  1. Naciśnij Dw razie potrzeby. Nie na komputerze Mac? Zastosowanie CtrlD.

więcej podświetlonych wystąpień zmiennej

Nie działało? Spróbuj ponownie, upewniając się, że nic nie zostało wybrane .

Więcej poleceń:

Znajdź wszystko: CtrlG zaznacza wszystkie wystąpienia jednocześnie. Nie na komputerze Mac?AltF3

Cofnij wybór: U krok wstecz. Nie na komputerze Mac?CtrlU

Szybkie pomijanie następnego: KD pomija następne wystąpienie. Nie na komputerze Mac?CtrlKCtrlD

Wzniosłe Dokumenty

Nolan Amy
źródło
14
Co to jest ⌘, jak to zrobić na klawiaturze innej niż MAC?
Bjarke Freund-Hansen
6
przynajmniej w ST3 możesz zrobić Ctrl-⌘-G bez drugiej komendy ⌘-D. Niestety, w menu jest strasznie źle oznaczone!
watsonic
30
To nie odpowiada na pierwotne pytanie OP. On konkretnie zapytał variable (not just any string). To po prostu wybiera wszystkie wystąpienia ciągu.
Betjamin Richards
17
@BetjaminRichards Upewnij się, że nie wybierasz (podświetlasz) zmiennej. Po prostu przesuń kursor na zmienną, a następnie naciśnij ⌘D. Nawiasem mówiąc, właśnie taki problem miałem z odpowiedzią MattDMo ( stackoverflow.com/a/16844924/483520 ).
Nolan Amy
2
@MuhammadUmer Wszystko, co pasuje do słowa, biorąc pod uwagę granice. Nie jest to prawdziwe wyszukiwanie zmiennych, ale znacznie lepsze niż proste dopasowanie ciągów.
Nolan Amy,
135

Wiem, że pytanie dotyczy komputerów Mac, ale znalazłem się tutaj, szukając odpowiedzi na Ubuntu, więc myślę, że moja odpowiedź może być dla kogoś przydatna.

Łatwy sposób to zrobić: AltF3.

elaRosca
źródło
10
wciąż wybiera wszystko, co ma w środku foo.
user1767754
1
Ta odpowiedź dotyczy pytania: stackoverflow.com/q/12162047/2270563 . Ale tutaj pytanie jest inne. Aby wybrać tylko zmienne, a nie wszystkie dopasowania.
Ram
4
@ user1767754 Jeśli nie chcesz wybierać wszystkiego, co ma w foośrodku, nie wybieraj już pierwszego foo. Zamiast tego po prostu umieść kursor w słowie, fooa następnie Alt-F3. Voila
Anwar
Ta odpowiedź jest zła. Spowoduje to wybranie wszystkich wystąpień foonie tylko wyróżnionych.
André C. Andersen
Nie działa w KDE, więc właśnie dodałem {„keys”: [„alt + d”], „command”: „find_all_under”} do pliku powiązań klawiszy: Preferencje> Kluczowe zapytania. Alt + D wydaje się nie kolidować z niczym.
user1985553
47

Mimo dużego wysiłku nie znalazłem wbudowanego ani wspomaganego przez wtyczkę sposobu robienia tego, co próbujesz zrobić. Całkowicie się zgadzam, że powinno to być możliwe, ponieważ program może odróżniać się foood buffoonpierwszego zaznaczenia, ale wydaje się, że nikt nie zna sposobu na zrobienie tego.


Oto jednak kilka przydatnych kombinacji klawiszy do wybierania słów w Sublime Text 2:

CtrlG- wybiera wszystkie wystąpienia bieżącego słowa ( AltF3w systemie Windows / Linux)

D- wybiera następne wystąpienie bieżącego słowa ( CtrlD)

  • K, D- pomija bieżącą instancję i przechodzi do wyboru następnej ( CtrlK, CtrlD)
  • U- „miękkie cofanie”, powrót do poprzedniego wyboru ( CtrlU)

E, H- używa bieżącego wyboru jako pola „Znajdź” w polu Znajdź i zamień ( CtrlE, CtrlH)

MattDMo
źródło
6
Ale obrys pojawia się tylko wokół wystąpień nazwy zmiennej , podczas gdy ⌘+Ddziała na wszystkie wystąpienia ciągu. Na przykład, jeśli zaznaczę foo, wysublimowane cudownie gładzi wszystkie zmienne foos, ale nie ciąg znaków foow mojej eject_buffoonfunkcji. A jednak używając powyższych kombinacji klawiszy, jestem zmuszony ręcznie ⌘+Kwyrównać ciągi znaków, aby uniknąć eject_bufbarnfunkcji. Musi być lepszy sposób!
Nolan Amy,
@Nolan - zadaj pytanie i sprawdź, czy ktoś ma jakieś sugestie. Jednym z możliwych obejść jest wybranie foo_(foo i spacja po nim) lub _foo_(spacje zarówno przed, jak i po), a następnie użycie ⌘-Dlub Ctrl-⌘-D.
MattDMo
7
Myślę, że właśnie takie pytanie zadał OP. Mówi konkretnie „ zmienna ” (nie „region tekstowy” lub „ciąg”) i „ obrys ” (nie „podświetlanie”). To pytanie nie jest duplikatem stackoverflow.com/questions/12162047/… - to mówi „wyróżniony wybór”. Także, oczywiście, fooczęsto pojawia się jako (foo), _foo,, (foo,, i _foo}tak _foo_jest bardzo niezadowalający.
Nolan Amy,
21

To zadziałało dla mnie. Umieść kursor na początku słowa, które chcesz zastąpić

CtrlK, CtrlD, CtrlD...

To powinno wybrać tyle wystąpień słowa, ile chcesz, a następnie możesz po prostu wpisać zamiennik.

płyty grzewcze
źródło
1
To była odpowiedź, która działała dla mnie osobno dla wspomnianej odpowiedzi. Dobrze !
Akash
To nie odpowiada na pytanie.
MD004
@ MD004 Jak to zrobić?
płyty grzewcze
@ płyty Pytanie dotyczy tego, jak „zaznaczyć wszystkie te wystąpienia” jednocześnie . Przyznaję, że sformułowanie pytania w tytule jest dwuznaczne, ale później w poście OP opisuje twoje rozwiązanie i mówi, że „wybiera je jeden po drugim, ale muszę ręcznie wykluczyć niezmienne ciągi pasujące „co jest niezadowalające. Przy okazji, przykładowym scenariuszem, w którym jest to niezadowalające, jest, powiedzmy, 1000 wystąpień słowa, które chcesz zastąpić, w którym to przypadku ręczne wybranie ich nie jest opcją.
MD004,
1
Ahh rozumiem. Dziękuję Ci. Teraz rozumiem, dlaczego zaakceptowana odpowiedź jest o wiele lepsza dla sytuacji PO i twojego przykładu na 1000 przypadków.
płyty grzewcze
12

Magia polega na tym, że musisz zacząć od pustego zaznaczenia, więc umieść kursor przed słowem / znakiem, który chcesz zaznaczyć, i naciśnij Ctrl+ D.

użytkownik1767754
źródło
2
To jest odpowiedź na zmienne pojedynczych znaków. W przypadku innych zmiennych możesz umieścić kursor w dowolnym miejscu zmiennej, od której chcesz zacząć.
manish_s
Działa to dla mnie w Sublime 3 i jest najprostszym sposobem, aby to zrobić, jeśli chcesz ograniczyć zmiany do mniejszego obszaru, na przykład w obrębie funkcji, a nie do całego pliku. Command-D dla macOS oczywiście.
Ryan H.
10

Dla mnie jest to największy błąd w Sublime. Alt+ F3jest trudny do osiągnięcia / zapamiętania, a Ctrl+ Shift+ Gnie ma sensu, biorąc pod uwagę, że Ctrl+ Dto „dodaj następną instancję do zaznaczenia”.

Dodaj to do przypisania klawiszy użytkownika (Preferencje> Powiązania klawiszy):

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

Teraz możesz wyróżnić coś, naciśnij Ctrl+ Shift+ D, a to doda każdą inną instancję w pliku do zaznaczenia.

Travis Heeter
źródło
1
To jedyna odpowiedź, która faktycznie odpowiada na pierwotne pytanie!
kmundnic
Nadal wybiera ciągi i komentarze
Wassadamo
4

To wspomniane przez @watsonic że w Sublime Text 3 na Mac OS, wychodząc z pustym wyboru , po prostu G( AltF3w systemie Windows) załatwia sprawę, zamiast D+ Gw Sublime Text 2.

Franklin Yu
źródło
4

Jak powiedział użytkownik1767754, kluczem jest tutaj, aby początkowo nie dokonywać żadnych wyborów.

Wystarczy umieścić kursor wewnątrz nazwy zmiennej, nie klikaj dwukrotnie, aby ją wybrać. W przypadku zmiennych jednoznakowych umieść kursor na początku lub na końcu zmiennej, aby początkowo nie dokonywać wyboru.

Teraz naciskaj Cmd+, Daby wybrać następną zmienną lub Ctrl+ Cmd+, Gaby zaznaczyć wszystkie zmienne jednocześnie. Magicznie wybierze tylko zmienne.

manish_s
źródło
0

Na wypadek, gdyby ktoś natknął się na to pytanie, szukając sposobu na zamianę ciągu na wiele plików, jest to Command+ Shift+F

Sójka
źródło