Vimium: Markieren Sie im Suchmodus alle Übereinstimmungen auf der Seite, nicht nur die aktuellen

Erstellt am 18. Juli 2012  ·  47Kommentare  ·  Quelle: philc/vimium

Im Chrome-Suchmodus können alle übereinstimmenden Wörter auf der Seite hervorgehoben werden
Kann vimium das auch?

suggestions

Hilfreichster Kommentar

6 Jahre später hoffe ich immer noch, diese Funktion zu haben

Alle 47 Kommentare

Nicht im Moment. Ich denke, wir würden einen Patch akzeptieren, wenn er keine merkliche Verzögerung verursachen würde.

Dies wäre ein ziemlich großes Unterfangen – vorausgesetzt, wir verwenden weiterhin window.find(), um die Suche durchzuführen, müssten wir es wiederholt aufrufen, um alle Übereinstimmungen anzuzeigen und dann unsere eigene Highlight-Benutzeroberfläche anzuzeigen.

Wenn wir diese Probleme am Ende haben, sollten wir Safaris Streichholzästhetik abreißen, IMO.

+1 für diese Funktion.

+1

Vimium ist großartig! Das ist meiner Meinung nach das einzige fehlende Stück.

+1 für diese Funktion. Eigentlich wollte ich das selbst vorschlagen, aber ich hatte das "Ich kann nicht der Einzige sein"-Gefühl.

Ja!

+1

+1

Wenn dies implementiert wird, wäre es auch schön, alle Übereinstimmungen in der Bildlaufleiste visuell markiert zu sehen, wie es bei Chromium der Fall ist.

+1

Ich habe vor kurzem von Vimium erfahren, ich kann nicht glauben, dass ich das nicht früher installiert habe.

+1

+1

+1

+1

+1
und ich denke, das wäre ein weiteres Killer-Feature

+1

Bitte hör auf, mit nutzlosen +1-Kommentaren zu antworten. es fügt der Diskussion nichts hinzu und wird eine Menge Zeit verschwenden, da sie Benachrichtigungen über Ihren nutzlosen "Beitrag" erhalten. abonnieren Sie ein Ticket über die Funktion "Beobachten".

+1

+1, das Standardchrom verhält sich, indem es alle übereinstimmenden Treffer hervorhebt. Wenn die erneute Implementierung ein Leistungsproblem darstellen würde, ist es dann möglich, die Chrome-Suche direkt aufzurufen?

Ist es möglich, die Suche von Chrome direkt aufzurufen?

Nein.

Um so etwas zu implementieren, wäre etwas wie (ein aktualisiertes) #1081 erforderlich, damit der Browser nicht bei jeder Suche hängen bleibt, was den Entwicklungs-/Wartungsaufwand erheblich erhöht.

Schließen.
So beliebt es auch ist, wir haben nicht wirklich eine Möglichkeit, dies zu implementieren.

(Vimium macht die Hervorhebung derzeit überhaupt nicht. Wir rufen einfach window.find() .)

4 Jahre...

+1 Dies ist wirklich ein großartiges Feature, wenn es implementiert werden kann.

Ich habe etwas recherchiert. Dies scheint es zu tun http://stackoverflow.com/a/5887719/96100 (die Lösung enthält IE, kann also durch Entfernen des IE-Teils weiter vereinfacht werden)

Aber ich denke, es gibt noch eine weitere Frage - wann und wie man das Highlight entfernt. Wann denke ich, wenn ich die nächste Suche starte oder etwas wie :noh ausführe; für wie, nehme ich an, dass execCommand('undo') es tun würde.

Freue mich sehr auf die Funktion.

Dies wird benötigt und ist nicht sicher, ob es sich um ein vimium-spezifisches Feature handelt, aber andere vim-ähnliche Erweiterungen tun dies ( wie zum Beispiel surfingkeys ). Es ist schon fast 5 Jahre her und dieses Feature ist noch nicht da. Was in aller Welt ist los?

Ich habe etwas recherchiert. Dies scheint es zu tun http://stackoverflow.com/a/5887719/96100 (die Lösung enthält IE, kann also durch Entfernen des IE-Teils weiter vereinfacht werden)

Diese Lösung scheint Inline-Änderungen an den DOMs der Seiten zu beinhalten, was mir sehr unangenehm ist.

Was in aller Welt ist los?

Dies ist schwer richtig zu machen (oder zumindest zu meiner Zufriedenheit).

Eine vollständige Implementierung müsste

  • find across elements (was Surfingkeys anscheinend nicht kann; siehe hier und hier für ihren Code)

    • z.B. Suchen und markieren Sie class SuppressPrintable (oder, noch schwieriger, markieren Sie lass Supp ) auf dieser Seite

    • Beachten Sie, dass die Zeile, die uns wichtig ist, HTML hat <span class="pl-k">class</span> <span class="pl-en" style="background-color: transparent;">SuppressPrintable</span> <span class="pl-k">extends</span> <span class="pl-e">Mode</span>

    • z.B. Suchen und markieren Sie testtest in test<img src="#">test , wie dies bei der nativen Suche der Fall ist

    • entweder suchen und markieren Sie testtest in test<input type="text">test (wie Firefox) oder nicht (wie Chrome).

  • Suchen und markieren Sie eine Zeichenfolge, die direkt von einer Seite kopiert wurde. Es gelten zwei Fälle:

    • der Elternteil hat white-space: normal oder nowrap . test string als test string , also müssen wir das finden. (surfingkeys können dies nicht, da es node.data )

    • der Elternteil hat white-space: pre , pre-line oder pre-wrap . test string als test string , also müssen wir das finden

  • Suche über Elemente hinweg, die Leerzeichen darstellen (zB <br /> oder <p></p> ). (surfingkeys können das nicht)

    • z.B. Test<br />Test sollte gefunden und markiert werden, indem man Test\nTest sucht ( oder vielleicht Test\r\nTest ? )

    • z.B. <p>Test</p><p>Test</p> sollte gefunden und markiert werden, indem man Test\n\nTest (oder Test\r\n\r\nTest ) sucht.

  • (optional) Suchen und markieren Sie Übereinstimmungen in <input> s, <textarea> s, <button> s usw. Dies ist ein großer Aufwand, um es richtig zu machen.

Wir können die Eigenschaft innerText , um eine Textdarstellung der Seite zu erhalten, die uns die meisten Übereinstimmungen mitteilt (außer – insbesondere – die im letzten Aufzählungspunkt erwähnten) und welche Vimium verwendet. Um jedoch hervorzuheben (oder sogar eine Auswahl zu erstellen, ohne window.find ), müssen wir die Ergebnisse der Textsuche (auf innerText ) wieder auf Bereiche im DOM abbilden.

Mein vorgeschlagener (fauler) Ansatz dafür würde eine Art binäre Suche des armen Mannes beinhalten, die Range s erzeugt und toString() , um innerText zuzuordnen. Ich bin nicht sonderlich daran interessiert, dies selbst umzusetzen.

Dies scheint eine sehr erwünschte Funktion zu sein, aber vielleicht sind alle Anforderungen zusammengenommen zu groß, um sie zu bewältigen. Vielleicht könnte eine kleinere Anzahl von Unterschritten dies leichter zugänglich machen.

+1

6 Jahre später hoffe ich immer noch, diese Funktion zu haben

  • Übrigens hat dieses Plugin Chrome Regex Search diese Funktion implementiert.
  • Es wäre toll, wenn vimium dies auch unterstützen kann.

Die Erweiterung Chrome Regex Search verwendet eine sehr gefährliche Methode, um die Hervorhebungsfunktion zu implementieren, und kann einige normale Webseiten beschädigen, da sie den JavaScript-Code des Hosts zerstören und einige Klickaktionen entfernen könnte.

Dieses Problem scheint nicht nur ich zu haben.

Ich habe etwas recherchiert. Dies scheint es zu tun http://stackoverflow.com/a/5887719/96100 (die Lösung enthält IE, kann also durch Entfernen des IE-Teils weiter vereinfacht werden)

Diese Lösung scheint Inline-Änderungen an den DOMs der Seiten zu beinhalten, was mir sehr unangenehm ist.

Was in aller Welt ist los?

Dies ist schwer richtig zu machen (oder zumindest zu meiner Zufriedenheit).

Eine vollständige Implementierung müsste

  • find across elements (was Surfingkeys anscheinend nicht kann; siehe hier und hier für ihren Code)

    • z.B. Suchen und markieren Sie class SuppressPrintable (oder, noch schwieriger, markieren Sie lass Supp ) auf dieser Seite
    • Beachten Sie, dass die Zeile, die uns wichtig ist, HTML hat <span class="pl-k">class</span> <span class="pl-en" style="background-color: transparent;">SuppressPrintable</span> <span class="pl-k">extends</span> <span class="pl-e">Mode</span>
    • z.B. Suchen und markieren Sie testtest in test<img src="#">test , wie dies bei der nativen Suche der Fall ist
    • entweder suchen und markieren Sie testtest in test<input type="text">test (wie Firefox) oder nicht (wie Chrome).
  • Suchen und markieren Sie eine Zeichenfolge, die direkt von einer Seite kopiert wurde. Es gelten zwei Fälle:

    • der Elternteil hat white-space: normal oder nowrap . test string als test string , also müssen wir das finden. (surfingkeys können dies nicht, da es node.data )
    • der Elternteil hat white-space: pre , pre-line oder pre-wrap . test string als test string , also müssen wir das finden
  • Suche über Elemente hinweg, die Leerzeichen darstellen (zB <br /> oder <p></p> ). (surfingkeys können das nicht)

    • z.B. Test<br />Test sollte gefunden und markiert werden, indem man Test\nTest sucht ( oder vielleicht Test\r\nTest ? )
    • z.B. <p>Test</p><p>Test</p> sollte gefunden und markiert werden, indem man Test\n\nTest (oder Test\r\n\r\nTest ) sucht.
  • (optional) Suchen und markieren Sie Übereinstimmungen in <input> s, <textarea> s, <button> s usw. Dies ist ein großer Aufwand, um es richtig zu machen.

Wir können die Eigenschaft innerText , um eine Textdarstellung der Seite zu erhalten, die uns die meisten Übereinstimmungen mitteilt (außer – insbesondere – die im letzten Aufzählungspunkt erwähnten) und welche Vimium verwendet. Um jedoch hervorzuheben (oder sogar eine Auswahl zu erstellen, ohne window.find ), müssen wir die Ergebnisse der Textsuche (auf innerText ) wieder auf Bereiche im DOM abbilden.

Mein vorgeschlagener (fauler) Ansatz dafür würde eine Art binäre Suche des armen Mannes beinhalten, die Range s erzeugt und toString() , um innerText zuzuordnen. Ich bin nicht sonderlich daran interessiert, dies selbst umzusetzen.

Ich recherchiere auch zu window.find(). Es hebt nur das aktuelle Ergebnis im Web hervor, nicht das gesamte Ergebnis. Vielleicht die Methode mehrmals aufrufen? Ich denke, es ist keine gute Idee für dieses Problem.

Wie wäre es mit dieser Routine?

im Suchmodus, bevor Benutzer die Eingabetaste drücken, rufen Sie window.find() nur einmal für jede aktualisierte Eingabe auf.

Drücken Sie nach der Verwendung die Eingabetaste, rufen Sie window.find() auf, um alle Vorkommen anzuzeigen.
[ möglicherweise, um sich die Suchergebnisposition direkt vor der Eingabe zu merken ]

window.find() hebt immer den "aktuellen" ausgewählten Bereich hervor, während es keine perfekte Methode zum Simulieren des Hintergrundfarbblocks gibt (wenn beispielsweise eine Linie ihre Hintergrundfarbe/-bild besitzt, ist die simulierte Hintergrundfarbe unsichtbar).

window.find() hebt immer den "aktuellen" ausgewählten Bereich hervor, während es keine perfekte Methode zum Simulieren des Hintergrundfarbblocks gibt (wenn beispielsweise eine Linie ihre Hintergrundfarbe/-bild besitzt, ist die simulierte Hintergrundfarbe unsichtbar).

Hallo, Lassen Sie mich meine Routine genauer beschreiben.

Geben Sie a , rufen Sie window.find bis NULL zurückgegeben wird. Sammle alle Spiele
Geben Sie ab , rufen Sie window.find bis NULL zurückgegeben wird. sammle alle Spiele, lass die vorherigen fallen
Wenn Sie enter , verwenden Sie tatsächlich das Suchergebnis-Array.

@Piping window.find() löscht immer alle alten Hervorhebungsbereiche und

Haftungsausschluss: Ich arbeite in keiner Form mehr an Browsererweiterungen, daher ist mein Wissen wahrscheinlich veraltet.

Geben Sie a , rufen Sie window.find bis NULL . Sammle alle Spiele
Geben Sie ab , rufen Sie window.find bis NULL . sammle alle Spiele, lass die vorherigen fallen

window.find ist schrecklich und sollte nach Möglichkeit vermieden werden

  • Es wird im Hauptthread ausgeführt und blockiert daher Benutzereingaben
  • Es hat UI-Effekte, erzwingt also auch das Rendern und blockiert weiterhin Benutzereingaben
  • Es ist auswahlbasiert, sodass CSS, das die Auswahl von Text blockiert, je nach gewähltem Browser verschiedene seltsame Verhaltensweisen aufweisen kann
  • Es wird nicht (oder zumindest nicht früher) in FF gewickelt
  • Es liegt außerhalb der Spezifikation und ist offiziell veraltet, ohne die Absicht, das Verhalten zwischen den Browsern zu standardisieren
  • Das Abrufen der Auswahldaten auf diese Weise ist weitaus teurer als das direkte Abfragen des DOM.

    • Wie Dahan zu Recht erwähnt, wird die wahre Hervorhebung immer verworfen, also müssten wir diese sammeln, um mehr als 1 Übereinstimmung hervorzuheben

    • <input> / <textarea> ist schwer, diese Daten gut herauszubekommen, noch bevor wir uns um das nicht triviale Problem des Hervorhebens von Text in ihnen kümmern müssen.

Als ich ein Contributor war, haben wir uns darum gestritten, die Anzahl der Suchergebnisse zu zählen, weil die Suche auf großen Seiten so langsam war. Die Verwendung von window.find war um eine Größenordnung langsamer und funktionierte bei der Suche mit regulären Ausdrücken überhaupt nicht. Ich rate dringend davon ab, es für mehr als eine einzelne Suche zu verwenden, und selbst dann sollte es der letzte Ausweg sein.

@gdh1995 Ich wollte windows.find() , wie du gesagt hast. Es ist nur find der Text.
@ mrmr1993 Ich verstehe, dass diese Funktion mehr Rechenleistung oder / nicht wie erwartet funktioniert (nicht einmal in vim).

Gibt es einen anderen als einen philosophischen Grund, warum die Erweiterung diese Art von Funktion nicht einfach zulassen und in einen "experimentellen" Abschnitt der Einstellungen der Erweiterung stecken kann, mit entsprechenden Warnungen, die darauf hinweisen, dass einige Seiten beschädigt werden können? Dies scheint eine beliebte Anfrage zu sein, die es sinnvoll macht, sie dort hinzuzufügen. Ich war zum Beispiel mit der Erweiterung " Selection Highlighter " sehr zufrieden, obwohl sie Seiten brechen könnte, einfach weil der Nutzen das Risiko überwiegt; Ich denke das gleiche gilt hier.

+1 hier. :)

Ich stimme den Gefühlen von Macintosh zu.

Ich verwende die vimium-Suche als Ersatz für das Find-Tool, damit ich die Tastenkombinationen über verschiedene Installationen hinweg einheitlich halten kann (benutze immer /, um Dinge zu finden).

+1

Firefox hat browser.find.find und browser.find.highlightResults . Es scheint Regex nicht zu unterstützen, sieht aber ansonsten genau so aus, wie dieses Problem benötigt würde.

Ich möchte nur anmerken, dass SurfingKeys über seine Suchfunktion Übereinstimmungen auf der Seite hervorhebt. Ich weiß nicht, wie sie das machen (es scheint eine Art Überlagerung zu sein), aber es ist "gut genug", dass ich jetzt stattdessen diese Erweiterung verwende. YMMV.

+1 - wünschte, es gäbe zumindest einen Workaround dafür.

8 Jahre... :)

Kürzlich kam mir eine andere Idee: Es ist nicht notwendig, die Hervorhebungshintergrundfarbe zu zeichnen, und wir können stattdessen Maskierungsrechte verwenden. Daher habe ich eine einfache Version in meinem angepassten Vimium implementiert, Vimium C , und es unterstützt Ctrl+J/K um nächste/vorherige zu finden und Ctrl+Shift+J/K um Rechtecke auf allen Übereinstimmungen im aktuell sichtbaren Bereich zu flashen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen