En este momento, tengo mi marco Emacs dividido verticalmente, y estoy mirando dos buffers diferentes en las dos ventanas.
Me gustaría ir a una palabra en un búfer, presionar algunas teclas y tener las ocurrencias de esa palabra (si las hay) resaltadas en el otro búfer, desplazándome hacia ella si es necesario.
¿Hay una manera de hacerlo?
En la captura de pantalla anterior, con mi cursor justo antes de "bar" en el búfer izquierdo, me gustaría poder <hacer algo> y ver rápidamente dónde está "bar" en el búfer derecho.
Nota: Esto está relacionado con ¿Cómo encuentro texto en múltiples buffers abiertos? en el sentido de que, si pudiera hacer una búsqueda en el "otro" búfer, haría lo que quisiera. Pero ninguna de las respuestas allí es exactamente lo que quiero:
- Las
occur
soluciones basadas abren una nueva ventana que muestra líneas coincidentes, mientras que me gustaría mantener mis dos ventanas aún mostradas; en realidad, voy a buscar en el otro búfer el contexto alrededor de la coincidencia, por lo que solo mostraré la línea coincidente No es de mucha ayuda. multi-isearch-buffers
requiere que especifique la lista de buffers cada vez que deseo hacer esta búsqueda (muchas veces), en lugar de seleccionarla automáticamente como los dos buffers mostrados. Más importante aún, cuando comienzo desde una ventana y realizo la búsqueda, cuando encuentra la coincidencia en el otro búfer, muestra ese búfer en esta ventana, de modo que ambas ventanas muestran el mismo (otro) búfer. Entonces Cg vuelve a poner todo, y ya no puedo ver la palabra resaltada en el otro búfer.icicle-search
tiene tantas características que uno de ellos puede hacer esto, pero no pude encontrar nada después de un vistazo superficial a la documentación.
C-s C-w C-x o C-s C-s
no me suena tan mal. (No necesita unC-s
derecho después delC-w
.)C-s C-w C-x o C-s C-s C-x o
parece estar bien.Respuestas:
Puede usar un paquete llamado
highlight-global
que está disponible en github pero no en Melpa (al momento de escribir esto).La
highlight-frame-toggle
función definida en este paquete resaltará la palabra en el punto o la región seleccionada en todas partes del marco (en todos los buffers). Sin embargo, esto no haría el desplazamiento automático a la palabra resaltada que necesita. Elige un color de resaltado diferente a medida que resalta más palabras sin borrar los reflejos anteriores.Aquí hay una captura de pantalla de cómo se ve:
Haga clic para ver mejor la captura de pantalla
fuente
helm tiene interfaces que pueden lograr este objetivo, grabé un Gifcast para demostrar el paquete helm-swoop :
Después de comenzar la
helm-swoop
búsqueda, puedo reducir a menos candidatos ingresando más tokens separados por espacios o presionarC-p
yC-n
cambiar al siguiente y desplazarme en el búfer objetivo al mismo tiempo.fuente
helm-swoop
.C-s C-w C-x o C-s C-s C-x o
(que es lo que estoy usando ahora, y parece estar bien en realidad).¿Qué tal usar
highlight-regexp
para resaltar el símbolo actual (o palabra, región, etc.) en la otra ventana?Aquí hay un par de funciones que podrían funcionar. El primero encontrará el símbolo en el punto, luego saltará a la otra ventana y lo resaltará. El segundo salta a la otra ventana y elimina los resaltados.
En ambos casos, esto salta hacia atrás, por lo que la ventana actual permanece activa al final. No estoy seguro de si eso es lo que desea, de lo contrario, deje la última
other-window
llamada.Estas funciones también podrían mejorarse comprobando y haciendo coincidir la región activa; lidiar con el caso donde no hay otra ventana visible; etc.
fuente
highlight-frame-toggle
comando mencionado en otra respuesta parece ser una versión más pulida de esto, por lo que supongo que no necesita rodar la suya.