Cómo seleccionar todas las instancias de una variable y editar el nombre de la variable en Sublime

428

Si selecciono una variable (no cualquier cadena) en mi código, todas las demás instancias de esa variable obtienen un trazo (contorno blanco) a su alrededor:

ingrese la descripción de la imagen aquí

¿Existe un método abreviado de teclado que me permita seleccionar todas esas instancias de la variable y editarlas todas a la vez?


Cosas que he probado:

D, Ky Ume permite seleccionarlos uno por uno, pero tengo que excluir manualmente las coincidencias de cadenas no variables:

ingrese la descripción de la imagen aquí

Y usando CtrlGsimplemente selecciona todas las coincidencias de cadena:

ingrese la descripción de la imagen aquí

Claramente, Sublime puede diferenciar entre coincidencias de variables y cadenas. ¿No hay forma de seleccionar solo las coincidencias de variables?

Oskar Persson
fuente

Respuestas:

604
  1. Coloca el cursor en la variable.

    Nota: la clave es comenzar con una selección vacía. No resaltes; solo pon tu cursor allí.

cursor de texto en variable

  1. Presione Dsegún sea necesario. ¿No en una Mac? Uso CtrlD.

más instancias de variable resaltadas

No funciono? Intente nuevamente, asegurándose de comenzar con nada seleccionado .

Más comandos:

Buscar todo: CtrlG selecciona todas las ocurrencias a la vez. ¿No en una Mac?AltF3

Deshacer selección: U pasos hacia atrás. ¿No en una Mac?CtrlU

Salto rápido siguiente: KD salta la siguiente ocurrencia. ¿No en una Mac?CtrlKCtrlD

Documentos sublimes

Nolan Amy
fuente
14
¿Qué es ⌘, cómo se hace esto en un teclado que no es MAC?
Bjarke Freund-Hansen
66
al menos en ST3 puedes hacer Ctrl-⌘-G sin el otro comando ⌘-D. ¡Desafortunadamente está mal etiquetado en el menú!
Watsonic
30
Esto no responde la pregunta original del OP. Él específicamente preguntó variable (not just any string). Esto simplemente selecciona todas las ocurrencias de la cadena.
Betjamin Richards
17
@BetjaminRichards Asegúrese de no seleccionar (resaltar) la variable. Simplemente mueva el cursor sobre la variable y luego presione ⌘D. Por cierto, este es exactamente el problema que tuve con la respuesta de MattDMo ( stackoverflow.com/a/16844924/483520 ).
Nolan Amy
2
@MuhammadUmer Cualquier cosa que coincida con la palabra, teniendo en cuenta los límites. No es una verdadera búsqueda de variables, pero es mucho mejor que la simple coincidencia de cadenas.
Nolan Amy
135

Sé que la pregunta es sobre Mac, pero llegué aquí buscando la respuesta para Ubuntu, así que supongo que mi respuesta podría ser útil para alguien.

Una forma sencilla de hacerlo: AltF3.

elaRosca
fuente
10
sigue seleccionando todo lo que tiene foo dentro.
user1767754
1
Esta respuesta es para la pregunta: stackoverflow.com/q/12162047/2270563 . Pero aquí la pregunta es diferente. Para seleccionar solo las variables en lugar de todas las coincidencias.
Ram
44
@ user1767754 Si no desea seleccionar todo lo que tiene foodentro, no seleccione el primero foo. En su lugar, simplemente coloque un cursor en la palabra fooy luego Alt-F3. Voila
Anwar
Esta respuesta es incorrecta. Esto seleccionará todas las instancias, foono solo las resaltadas.
André C. Andersen
No funciona en KDE, por lo que acabo de agregar {"claves": ["alt + d"], "comando": "find_all_under"} al archivo de enlaces de teclas: Preferencias> Enlaces de teclas. alt + d no parece entrar en conflicto con nada allí.
user1985553
47

A pesar de mucho esfuerzo, no he encontrado una forma integrada o asistida por complementos para hacer lo que estás tratando de hacer. Estoy completamente de acuerdo en que debería ser posible, ya que el programa puede distinguirlo foode buffooncuando lo resaltas por primera vez, pero nadie parece saber cómo hacerlo.


Sin embargo, aquí hay algunos combos de teclas útiles para seleccionar palabras en Sublime Text 2:

CtrlG- selecciona todas las apariciones de la palabra actual ( AltF3en Windows / Linux)

D- selecciona la siguiente instancia de la palabra actual ( CtrlD)

  • K, D- omite la instancia actual y pasa a seleccionar la siguiente ( CtrlK, CtrlD)
  • U- "Deshacer suave", retrocede a la selección anterior ( CtrlU)

E, H- utiliza la selección actual como el campo "Buscar" en Buscar y reemplazar ( CtrlE, CtrlH)

MattDMo
fuente
66
Pero el trazo aparece solo alrededor de las ocurrencias del nombre de la variable , mientras que ⌘+Dactúa sobre todas las ocurrencias de la cadena. Por ejemplo, si destaco foo, sublime maravillosamente traza todas las variables foos, pero no la cadena fooen mi eject_buffoonfunción. Y sin embargo, usando los combos de teclas anteriores, me veo obligado a ⌘+Keliminar manualmente las coincidencias de cadenas para evitar tener una eject_bufbarnfunción. ¡Debe haber una mejor manera!
Nolan Amy
@Nolan: siéntase libre de hacer una pregunta y ver si alguien tiene alguna sugerencia. Una posible solución alternativa es seleccionar foo_(foo y el espacio después) o _foo_(espacios tanto antes como después) y luego usar ⌘-Do Ctrl-⌘-D.
MattDMo
77
De hecho, creo que esta es exactamente la pregunta que estaba haciendo el OP. Específicamente dice " variable " (no "región de texto" o "cadena") y " trazo " (no "resaltado"). Y esta pregunta no es un duplicado de stackoverflow.com/questions/12162047/… , que dice "selección resaltada". También, por supuesto, fooa menudo se muestra como (foo), _foo,, (foo,, y _foo}, por lo _foo_es bastante insatisfactoria.
Nolan Amy
21

Esto funcionó para mí. Coloque el cursor al comienzo de la palabra que desea reemplazar, luego

CtrlK` CtrlD` CtrlD...

Eso debería seleccionar tantas instancias de la palabra como desee, luego puede escribir el reemplazo.

placas
fuente
1
Esta fue la respuesta que funcionó para mí, aparte de la respuesta que se ha mencionado. Bueno !
Akash
Esto no responde la pregunta.
MD004
@ MD004 ¿Cómo es eso?
placas el
@hobs La pregunta es cómo "seleccionar todas esas instancias" a la vez . Admitiré que la formulación de la pregunta en el título es ambigua, pero más adelante en la publicación, el OP describe su solución y dice que esto "los selecciona uno por uno, pero tengo que excluir manualmente las coincidencias de cadenas no variables "que es insatisfactorio. Por cierto, un escenario de ejemplo en el que esto no es satisfactorio es cuando hay, por ejemplo, 1000 apariciones de la palabra que desea reemplazar, en cuyo caso seleccionarlas manualmente no es una opción.
MD004
1
Ahh ya veo. Gracias. Ahora veo por qué la respuesta aceptada es mucho mejor para la situación del OP y su ejemplo de 1000 ocurrencias.
placas el
12

La magia es que debes comenzar con una selección vacía, así que coloca el cursor delante de la palabra / carácter que deseas seleccionar y presiona Ctrl+ D.

usuario1767754
fuente
2
Esta es la respuesta para variables de caracteres individuales. Para cualquier otra variable, puede colocar el cursor en cualquier lugar de la variable para comenzar.
manish_s
Esto funciona para mí en Sublime 3 y es la forma más sencilla de hacerlo si desea limitar los cambios a un área más pequeña como dentro de una función en lugar de todo el archivo. Command-D para macOS, por supuesto.
Ryan H.
10

Para mí, este es el mayor error en Sublime. Alt+ F3es difícil de alcanzar / recordar, y Ctrl+ Shift+ Gno tiene sentido teniendo en cuenta que Ctrl+ Des "agregar la siguiente instancia a la selección".

Agregue esto a sus enlaces de teclas de usuario (Preferencias> Enlaces de teclas):

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

Ahora puede resaltar algo, presione Ctrl+ Shift+ D, y agregará cualquier otra instancia en el archivo a la selección.

Travis Heeter
fuente
1
¡Esta es la única respuesta que realmente responde a la pregunta original!
kmundnic
Todavía selecciona cadenas y comentarios
Wassadamo
4

Se menciona por @watsonic que en Sublime Texto 3 en Mac OS, comenzando con una selección vacía , simplemente G( AltF3en Windows) hace el truco, en lugar de D+ Gde Sublime Text 2.

Franklin Yu
fuente
4

Como dijo el usuario 1767754, la clave aquí es no hacer ninguna selección inicialmente.

Simplemente coloque el cursor dentro del nombre de la variable, no haga doble clic para seleccionarlo. Para las variables de un solo carácter, coloque el cursor al frente o al final de la variable para no hacer ninguna selección inicialmente.

Ahora sigue presionando Cmd+ Dpara la siguiente selección de variables o Ctrl+ Cmd+ Gpara seleccionar todas las variables a la vez. Seleccionará mágicamente solo las variables.

manish_s
fuente
0

En caso de que alguien más se haya topado con esta pregunta mientras buscaba una forma de reemplazar una cadena en varios archivos, es Command+ Shift+F

Arrendajo
fuente