Come selezionare tutte le istanze di una variabile e modificare il nome della variabile in Sublime


428

Se seleziono una variabile (non una qualsiasi stringa) nel mio codice, tutte le altre istanze di quella variabile ottengono un tratto (contorno bianco) attorno a loro:

inserisci qui la descrizione dell'immagine

Esiste una scorciatoia da tastiera che mi permetterà di selezionare tutte quelle istanze della variabile e modificarle tutte in una volta?


Cose che ho provato:

D, Ke Umi consente di selezionarli uno per uno, ma devo escludere manualmente le corrispondenze di stringa non variabili:

inserisci qui la descrizione dell'immagine

E usando CtrlGsemplicemente seleziona tutte le corrispondenze di stringa:

inserisci qui la descrizione dell'immagine

Chiaramente, Sublime è in grado di distinguere tra corrispondenze variabili e stringhe. Non c'è modo di selezionare solo le corrispondenze variabili?

Risposte:


604
  1. Posiziona il cursore nella variabile.

    Nota: la chiave è iniziare con una selezione vuota. Non evidenziare; basta posizionare il cursore lì.

cursore testo su variabile

  1. Premere Dsecondo necessità. Non su un Mac? Usa CtrlD.

più istanze di variabile evidenziate

Non ha funzionato? Riprova, assicurandoti di iniziare con niente selezionato .

Più comandi:

Trova tutto: CtrlG seleziona tutte le occorrenze contemporaneamente. Non su un Mac?AltF3

Annulla selezione: fa un U passo indietro. Non su un Mac?CtrlU

Salto rapido successivo: KD salta la ricorrenza successiva. Non su un Mac?CtrlKCtrlD

Documenti sublimi


14
Che cos'è ⌘, come si fa su una tastiera non MAC?
Bjarke Freund-Hansen,

6
almeno in ST3 puoi fare Ctrl-⌘-G senza l'altro comando ⌘-D. Purtroppo è terribilmente etichettato nel menu!
Watsonic,

30
Ciò non risponde alla domanda originale del PO. Ha chiesto specificamente variable (not just any string). Questo seleziona semplicemente tutte le occorrenze della stringa.
Betjamin Richards,

17
@BetjaminRichards Assicurati di non selezionare (evidenziare) la variabile. Basta spostare il cursore sulla variabile e quindi premere ⌘D. Per inciso, questo è esattamente il problema che ho avuto con la risposta di MattDMo ( stackoverflow.com/a/16844924/483520 ).
Nolan Amy,

2
@MuhammadUmer Tutto ciò che corrisponde alla parola, tenendo conto dei confini. Non è una vera ricerca di variabili, ma molto meglio della semplice corrispondenza delle stringhe.
Nolan Amy,

135

So che la domanda riguarda i Mac, ma sono arrivato qui alla ricerca della risposta per Ubuntu, quindi immagino che la mia risposta possa essere utile a qualcuno.

Un modo semplice per farlo: AltF3.


10
sta ancora selezionando tutto ciò che ha dentro.
user1767754

1
Questa risposta è per la domanda: stackoverflow.com/q/12162047/2270563 . Ma qui la domanda è diversa. Per selezionare solo le variabili anziché tutte le corrispondenze.
Ram

4
@ user1767754 Se non vuoi selezionare tutto ciò che ha foodentro, non selezionare già il primo foo. Posiziona invece un cursore nella parola fooe poi Alt-F3. Voila
Anwar,

Questa risposta è sbagliata Questo selezionerà tutte le istanze, foonon solo quelle evidenziate.
André C. Andersen,

Non funziona in KDE, quindi ho appena aggiunto {"keys": ["alt + d"], "command": "find_all_under"} al file dei key binding: Preferenze> Key Bindings. alt + d non sembra essere in conflitto con nulla lì.
user1985553,

47

Nonostante molti sforzi, non ho trovato un modo integrato o assistito da plugin per fare ciò che stai cercando di fare. Sono completamente d'accordo sul fatto che dovrebbe essere possibile, in quanto il programma può distinguere fooda buffoonquando lo evidenzi per la prima volta, ma nessuno sembra sapere un modo per farlo.


Tuttavia, ecco alcune utili combinazioni di tasti per selezionare le parole in Sublime Text 2:

CtrlG- seleziona tutte le occorrenze della parola corrente ( AltF3su Windows / Linux)

D- seleziona l'istanza successiva della parola corrente ( CtrlD)

  • K, D- salta l'istanza corrente e continua a selezionare quella successiva ( CtrlK, CtrlD)
  • U- "soft annulla", torna alla selezione precedente ( CtrlU)

E, H- utilizza la selezione corrente come campo "Trova" in Trova e sostituisci ( CtrlE, CtrlH)


6
Ma il tratto appare solo attorno alle occorrenze del nome della variabile , mentre ⌘+Dagisce su tutte le occorrenze della stringa. Ad esempio, se metto in evidenza foo, sublimi accarezza meravigliosamente tutte le variabili foos, ma non la stringa foonella mia eject_buffoonfunzione. Eppure, usando le combinazioni di tasti sopra, sono costretto a ⌘+Kuscire manualmente le corrispondenze di stringhe per evitare di avere una eject_bufbarnfunzione. Deve esserci un modo migliore!
Nolan Amy,

@Nolan - sentiti libero di porre una domanda e vedere se qualcuno ha qualche suggerimento. Una possibile soluzione alternativa è selezionare foo_(piè e lo spazio dopo di esso) o _foo_(spazi sia prima che dopo) e quindi usare ⌘-Do Ctrl-⌘-D.
MattDMo,

7
In realtà penso che questa sia esattamente la domanda che l'OP stava ponendo. Dice specificamente " variabile " (non "area di testo" o "stringa") e " tratto " (non "evidenziazione"). E questa domanda non è un duplicato di stackoverflow.com/questions/12162047/… - che si dice "selezione evidenziata". Inoltre, naturalmente, foospesso si presenta come (foo), _foo,, (foo,, e _foo}, quindi _foo_è piuttosto insoddisfacente.
Nolan Amy,

21

Questo ha funzionato per me. Posiziona il cursore all'inizio della parola che desideri sostituire, quindi

CtrlK, CtrlD, CtrlD...

Ciò dovrebbe selezionare tutte le occorrenze della parola che desideri, quindi puoi semplicemente digitare la sostituzione.


1
Questa è stata la risposta che ha funzionato per me a parte per la risposta che è stata menzionata. Buona !
Akash,

Questo non risponde alla domanda.
MD004,

@ MD004 In che modo?
Piani cottura

@hobs La domanda è come "selezionare tutte quelle istanze" contemporaneamente . Devo ammettere che il fraseggio della domanda nel titolo è ambiguo, ma più avanti nel post l'OP descrive la tua soluzione e dice che questo "li seleziona uno per uno, ma devo escludere manualmente le corrispondenze di stringa non variabili "che non è soddisfacente. A proposito, uno scenario di esempio in cui questo non è soddisfacente è quando ci sono, diciamo, 1000 occorrenze della parola che si desidera sostituire, nel qual caso selezionarle manualmente non è un'opzione.
MD004

1
Ah! Capisco. Grazie. Ora vedo perché la risposta accettata è molto migliore per la situazione del PO e il tuo esempio di 1000 occorrenze.
Piani cottura

12

La magia è che devi iniziare con una selezione vuota, quindi posiziona il cursore davanti alla parola / carattere che vuoi selezionare più volte e premi Ctrl+ D.


2
Questa è la risposta per variabili di singoli caratteri. Per qualsiasi altra variabile, è possibile posizionare il cursore in qualsiasi punto della variabile per iniziare.
manish_s

Questo funziona per me in Sublime 3 ed è il modo più semplice per farlo se si desidera limitare le modifiche a un'area più piccola come all'interno di una funzione anziché all'intero file. Comando-D per macOS, ovviamente.
Ryan H.

10

Per me, questo è l'errore più grande in Sublime. Alt+ F3è difficile da raggiungere / ricordare e Ctrl+ Shift+ Gnon ha senso considerando Ctrl+ Dè "aggiungi la prossima istanza alla selezione".

Aggiungi questo ai collegamenti dei tasti utente (Preferenze> Collegamenti dei tasti):

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

Ora puoi evidenziare qualcosa, premi Ctrl+ Shift+ De aggiungerà ogni altra istanza nel file alla selezione.


1
Questa è l'unica risposta che risponde effettivamente alla domanda originale!
kmundnic

Seleziona ancora stringhe e commenti
Wassadamo,

4

È menzionato da @watsonic che in Sublime Text 3 su Mac OS, a partire da una selezione vuota , semplicemente G( AltF3su Windows) fa il trucco, invece di D+ Gin Sublime Text 2.


4

Come diceva user1767754, la chiave qui è di non effettuare alcuna selezione inizialmente.

Posiziona il cursore all'interno del nome della variabile, non fare doppio clic per selezionarlo. Per le variabili a carattere singolo, posizionare il cursore all'inizio o alla fine della variabile per non effettuare alcuna selezione inizialmente.

Ora continua a premere Cmd+ Dper la successiva selezione di variabili o Ctrl+ Cmd+ Gper selezionare tutte le variabili contemporaneamente. Selezionerà magicamente solo le variabili.


0

Nel caso in cui qualcun altro si imbattesse in questa domanda mentre cercava un modo per sostituire una stringa tra più file, è Command+ Shift+F

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.