Wie kann bei der Suche immer sichergestellt werden, dass einige Zeilen nach dem hervorgehobenen Wort sichtbar sind?


7

Bei der Ausführung search/isearchin einem Text ist es manchmal wünschenswert, einige Zeilen nach der hervorgehobenen gesuchten Zeichenfolge zu sehen. Mit anderen Worten, um zu vermeiden, dass sich das hervorgehobene Wort am unteren Rand des Fensters befindet.

Wenn wir beispielsweise den folgenden Text in einem Puffer haben, versuchen Sie, das letzte Wort zu suchen, das Sie sehen können. Für mich ist es das Wort Prinzipien (da ich den Rahmen maximiert habe). Das markierte Wort (in meiner Situation das Wort Prinzipien ) befindet sich am unteren Rand des Bildschirms. Ich möchte immer einige Zeilen (wenn möglich) nach dem Wort , um zu sehen Grundsätzen nach Suche.

Surrounded
occasional 
pianoforte 
alteration 
unaffected 
impossible 
Perceived 
knowledge 
certainly 
Although 
moreover 
mistaken 
kindness 
horrible 
distance 
marriage 
country 
demesne 
Bachelor 
domestic 
extended 
doubtful 
Greatly 
Improved 
provided 
Dwelling 
speedily 
ignorant 
steepest 
Admiration 
instrument 
affronting 
invitation 
reasonably 
ecstatic 
wondered 
disposal 
curiosity  
shameless 
explained.
sincerity 
extremity 
additions 
principles
Carriage 
Remainder 
household 
direction 
zealously 
Sufficient 
motionless
compliment 
stimulated 
assistance

Sie können eine Funktion schreiben, die nach jedem Treffer einige Zeilen scrollt, und diese hinzufügen, wenn die Suchtaste aufgerufen wird.
ReneFroger

@ReneFrogertjuh Normalerweise sollte man, wenn man zu irgendeinem Zeitpunkt die Suchabfrage abbricht, in den Pufferzustand zurückkehren, bevor man eine Suche durchführt.
Name

Antworten:


5
(setq scroll-margin 3)

Funktioniert überall, nicht nur während isearch.

scroll-margin. Standard: 0. Anzahl der Randlinien am oberen und unteren Rand eines Fensters. Zentrieren Sie das Fenster neu, wenn der Punkt innerhalb dieser vielen Zeilen oben oder unten im Fenster liegt.


Vielen Dank für diese einfache Lösung, die die Frage beantwortet. Lassen Sie mich übrigens eine Frage stellen. Welche Rolle spielt 3 in dieser Antwort? Wenn ich 3 durch 1 ersetze, bekomme ich das Gleiche.
Name

2

M-x apropos-variable RET isearch.*\(hook\|function\) RETführt Sie zu isearch-update-post-hook, was scheint, was Sie suchen. Damit ...

(add-hook 'isearch-update-post-hook
          (lambda ()
            (when (> (length isearch-string) 0)
              ;;or whatever
              (recenter)))
          nil t)

1
Ich habe Ihren Code getestet. Es scheint in Ordnung zu sein. Erwarten Sie, ob das gesuchte Wort vor der Suche bereits sichtbar ist. Wenn ich (when (> (length isearch-string) 0)...in Ihrem Code durch ersetze (when (> 1 0)..., scheint es zu funktionieren. Aber ich verstehe nicht, woher das Problem kommt.
Name
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.