検索時に、強調表示された単語の後の数行が常に表示されるようにするにはどうすればよいですか?


7

search/isearchテキストで実行する場合、強調表示された検索文字列の後に数行を表示することが望ましい場合があります。つまり、強調表示された単語がウィンドウの下部に表示されないようにします。

たとえば、バッファに次のテキストがある場合、表示できる最後の単語を検索してみてください。私にとってそれは原則という言葉です(私はフレームを最大化しました)。ハイライト表示された単語(私の状況では「原則」)は画面の下部にあります。検索後の原則という単語の後に、可能な場合は常に数行を表示したいと思います。

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

ヒットごとにいくつかの行をスクロールする関数を記述し、検索ヒットキーが呼び出されたときにそれを追加できます。
ReneFroger、2015

@ReneFrogertjuh通常、いつでも検索クエリをキャンセルした場合は、検索を実行する前にバッファの状態に戻る必要があります。
名前

回答:


5
(setq scroll-margin 3)

中だけでなく、どこでも機能しisearchます。

scroll-marginデフォルト:0。ウィンドウの上部と下部のマージンの行数。ポイントがウィンドウの上部または下部のこの数行内に入るたびにウィンドウを再配置します。


質問に答えるこの簡単な解決策をありがとう。ちなみに質問させてください。この回答における3の役割は何ですか?3を1に置き換えると、同じ結果になります。
名前

2

M-x apropos-variable RET isearch.*\(hook\|function\) RETあなたをisearch-update-post-hook探しているようです。そう ...

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

1
私はあなたのコードをテストしました、それは問題ないようです、検索する前に検索された単語がすでに表示されているかどうかを期待します。私(when (> (length isearch-string) 0)...があなたのコードを置き換える(when (> 1 0)...と、うまくいくようです。しかし、どこから問題が発生するのかわかりません。
名前
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.