Mise en surbrillance du texte dans des tampons / fenêtres ouverts (affichés) - recherche de texte d'un tampon dans un autre

8

En ce moment, mon cadre Emacs est divisé verticalement et je regarde deux tampons différents dans les deux fenêtres.

Je voudrais aller à un mot dans un tampon, appuyer sur certaines touches et avoir les occurrences de ce mot (le cas échéant) en surbrillance dans l' autre tampon, en y faisant défiler si nécessaire.

Y-a-t-il un moyen de faire ça?

Capture d'écran pour expliquer

Dans la capture d'écran ci-dessus, avec mon curseur juste avant "bar" dans le tampon de gauche, j'aimerais pouvoir <faire quelque chose> et voir rapidement où "bar" se trouve dans le tampon de droite.


Remarque: Ceci est lié à Comment trouver du texte dans plusieurs tampons ouverts? dans le sens où, si je pouvais faire une recherche dans l'autre "tampon", il ferait ce que je veux. Mais aucune des réponses là-bas n'est exactement ce que je veux:

  • Les occursolutions basées ouvrent une nouvelle fenêtre qui montre les lignes correspondantes, tandis que je voudrais garder mes deux fenêtres toujours affichées - je vais en fait chercher dans l'autre tampon le contexte autour de la correspondance, donc n'afficher que la ligne correspondante n'est pas très utile.
  • multi-isearch-buffersm'oblige à spécifier la liste des tampons chaque fois que je veux faire cette recherche (beaucoup de fois), au lieu de la ramasser automatiquement comme les deux tampons affichés. Plus important encore, lorsque je démarre à partir d'une fenêtre et que j'effectue l'isearch, lorsqu'il trouve la correspondance dans l'autre tampon, il affiche ce tampon dans cette fenêtre, de sorte que les deux fenêtres affichent le même (autre) tampon. Ensuite, Cg remet tout en place et je ne vois plus le mot mis en surbrillance dans l'autre tampon.
  • icicle-search a tellement de fonctionnalités que l'un d'eux peut être en mesure de le faire, mais je n'ai rien trouvé après un examen rapide de la documentation.
ShreevatsaR
la source
En ce moment, ce que je fais est Cs Cw Cs (pour faire la recherche dans ce tampon), passer à l'autre tampon, faire Cs Cs (pour répéter la même recherche là-bas), puis revenir en arrière. C'est sept touches, que je pourrais enregistrer comme macro je suppose. Laisse-moi faire ça. Je suis quand même intéressé de savoir s'il existe d'autres solutions.
ShreevatsaR
FWIW: C-s C-w C-x o C-s C-sne me semble pas si mal. (Vous n'avez pas besoin d'un C-sdroit après le C-w.)
Drew
@Drew: Merci, l'idée d'utiliser une macro n'est apparue qu'après avoir posté la question; maintenant une macro qui C-s C-w C-x o C-s C-s C-x osemble en effet très bien.
ShreevatsaR

Réponses:

5

Vous pouvez utiliser un package appelé highlight-globalqui est disponible sur github mais pas sur Melpa (au moment de l'écriture).

La highlight-frame-togglefonction définie dans ce pacakge mettra en évidence le mot au point ou la région sélectionnée partout dans le cadre (dans tous les tampons). Cependant, cela ne ferait pas défiler automatiquement le mot en surbrillance dont vous avez besoin. Il sélectionne une couleur de surbrillance différente lorsque vous mettez en surbrillance plus de mots sans effacer les points forts précédents.

Voici une capture d'écran de ce à quoi il ressemble:

entrez la description de l'image ici Cliquez pour une meilleure vue de la capture d'écran

Kaushal Modi
la source
0

helm a des interfaces qui peuvent atteindre cet objectif, j'ai enregistré un Gifcast pour démontrer le package helm-swoop :

Après avoir commencé la helm-swooprecherche, je peux soit réduire à moins de candidats en entrant d'autres jetons séparés par des espaces, soit frapper C-pet C-npasser au suivant et faire défiler le tampon cible en même temps.

wasamasa
la source
Comme je l'ai dit dans la question, les solutions basées sur l'occurrence ne sont pas ce que je veux, car elles répertorient les lignes correspondantes (et je dois aller plus loin et interagir avec la liste) au lieu de garder l'autre tampon intact et de mettre le texte en surbrillance .
ShreevatsaR
Hmm, l'autre tampon est conservé intact et peut vous montrer le contexte, mais si les faits saillants sont ce que vous recherchez, helm-swoop pourrait être plus votre truc.
wasamasa
OK, édité pour démontrer helm-swoop.
wasamasa
J'aimerais pouvoir me clarifier. Pendant tout le processus, je ne veux pas l'autre fenêtre à jamais quoi que ce soit d'affichage autre ce qu'il affiche actuellement. Tout ce que je veux, c'est d'appuyer sur une touche et de voir dans l'autre fenêtre, comme c'est le cas, la (première, disons) occurrence du mot courant dans l'autre tampon. (Dans ma capture d'écran, lorsque mon curseur est sur "bar" dans le tampon de gauche, je veux appuyer sur une touche et être en mesure de voir où "bar" apparaît dans le tampon de droite, la droite étant toujours la même.) Équivalent à frapper C-s C-w C-x o C-s C-s C-x o(qui est ce que j'utilise maintenant, et semble bien en fait).
ShreevatsaR
Si helm pouvait mettre en évidence toutes les occurrences dans l'autre tampon (tout en faisant défiler pour que le premier soit visible à l'écran), cela le rendrait meilleur que la macro liée à la séquence de ces 8 frappes. :-)
ShreevatsaR
0

Que diriez-vous d'utiliser highlight-regexppour mettre en surbrillance le symbole actuel (ou mot, région, etc.) dans l'autre fenêtre?

Voici quelques fonctions qui pourraient fonctionner. Le premier trouvera le symbole au point, puis passera à l'autre fenêtre et le mettra en surbrillance. La seconde passe à l'autre fenêtre et supprime les hautes lumières.

 (require 'thingatpt)

 (defun highlight-other-window ()
   (interactive)
   (let ((match (thing-at-point 'symbol t)))
     (when match
       (save-excursion
         (other-window 1)
         (highlight-regexp (regexp-quote match))
         (other-window 1)))))

 (defun unhighlight-other-window ()
   (interactive)
   (save-excursion
     (other-window 1)
     (unhighlight-regexp t) 
     (other-window 1)))

Dans les deux cas, cela revient en arrière afin que la fenêtre actuelle reste active à la fin. Je ne sais pas si c'est ce que vous voulez, sinon laissez le dernier other-windowappel.

Ces fonctions pourraient également être améliorées en vérifiant et en faisant correspondre la région active; traiter le cas où aucune autre fenêtre n'est visible; etc.

glucas
la source
La highlight-frame-togglecommande mentionnée dans une autre réponse semble être une version plus soignée de cela, donc je suppose que vous n'avez pas besoin de lancer la vôtre.
glucas