助けてくれてありがとう。
Emacs では、iseach-forward (Cs) を使用するのが好きですが、強調表示されたフォント ワードが画面の一番下ではなく中央に配置されるようにすると、さらに使いやすくなります。
私はこれを継続的に行っていることに気づきました:
Cs foo Cs Cs Cs... おお!それが私が探していた「foo」です!Cl
検索結果を画面の中央に配置する方法はありますか?
乾杯
おそらく最善の方法は、次のフックを追加することです。
(add-hook 'isearch-mode-end-hook 'recenter-top-bottom)
recenter-top-bottom
これにより、インクリメンタル検索が成功するたびにコマンドが実行されます。
編集: 少し調査したところ、同じ文字列を繰り返し検索したときに実行される関数 (つまり、アクティブな検索中C-s
または連続して入力した場合) はand/orのようです。したがって、繰り返しごとに再センタリングしたい場合は、上記のフックを定義することに加えて、次のように関数にアドバイスする必要があります。C-r
isearch-repeat-forward
isearch-repeat-backward
(defadvice
isearch-repeat-forward
(after isearch-repeat-forward-recenter activate)
(recenter-top-bottom))
(defadvice
isearch-repeat-backward
(after isearch-repeat-backward-recenter activate)
(recenter-top-bottom))
(ad-activate 'isearch-repeat-forward)
(ad-activate 'isearch-repeat-backward)
個人的には、結果として生じる行動は非常に迷惑で方向感覚を失わせるものだと思いますが、de gustibus non est disputandum . おそらくrecenter-top-bottom
、最初に使用するために予約し、関数へのアドバイスで単独でisearch-mode-end-hook
使用する方が不快ではないでしょう。recenter
repeat
アドバイスisearch-forward
自体は、私が最初に上で提案したフックを追加することと同等であり、繰り返しの検索には効果がないようです。フックを追加する方が簡単で、私はより慣用的だと思うので、関数にアドバイスするよりもおそらく好まれるはずです。
ニコラスとグレッグに感謝します。
あなたの提案は私に正しい方向を示しました。これは私が求めていたものを達成するためのコードです:
(defadvice
evil-search-forward
(after evil-search-forward-recenter activate)
(recenter))
(ad-activate 'evil-search-forward)
(defadvice
evil-search-next
(after evil-search-next-recenter activate)
(recenter))
(ad-activate 'evil-search-next)
(defadvice
evil-search-previous
(after evil-search-previous-recenter activate)
(recenter))
(ad-activate 'evil-search-previous)
説明:
私はEvil(Emacsのvimモード)を使用することを追加して、物事をもっと複雑にしたくなかったので、質問ではそれを省略しました。
defadviceを使用して、前方に検索し、次に検索されたアイテムに移動し、前に検索されたアイテムに移動します。
言及する価値のあることは、私が(recenter-top-bottom)関数を使用しなかったことです。最初に検索されたアイテムを画面の中央に配置し、2番目のアイテムを上に、3番目のアイテムを下に配置するという動作はおかしなものでした。関数「recenter」を使用して、常に画面の中央に配置しました。
悪意のないユーザーの場合、コードは次のようになります:(テストされていません!)
(defadvice
isearch-forward
(after isearch-forward-recenter activate)
(recenter))
(ad-activate 'isearch-forward)
(defadvice
isearch-repeat-forward
(after isearch-repeat-forward-recenter activate)
(recenter))
(ad-activate 'isearch-repeat-forward)
(defadvice
isearch-repeat-backward
(after isearch-repeat-backward-recenter activate)
(recenter))
(ad-activate 'isearch-repeat-backward)
乾杯!
の後defadvice
に実行するために使用できます。recenter-top-bottom
isearch-forward