10

助けてくれてありがとう。

Emacs では、iseach-forward (Cs) を使用するのが好きですが、強調表示されたフォント ワードが画面の一番下ではなく中央に配置されるようにすると、さらに使いやすくなります。

私はこれを継続的に行っていることに気づきました:

Cs foo Cs Cs Cs... おお!それが私が探していた「foo」です!Cl

検索結果を画面の中央に配置する方法はありますか?

乾杯

4

5 に答える 5

6

おそらく最善の方法は、次のフックを追加することです。

(add-hook 'isearch-mode-end-hook 'recenter-top-bottom)

recenter-top-bottomこれにより、インクリメンタル検索が成功するたびにコマンドが実行されます。

編集: 少し調査したところ、同じ文字列を繰り返し検索したときに実行される関数 (つまり、アクティブな検索中C-sまたは連続して入力した場合) はand/orのようです。したがって、繰り返しごとに再センタリングしたい場合は、上記のフックを定義することに加えて、次のように関数にアドバイスする必要があります。C-risearch-repeat-forwardisearch-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使用する方が不快ではないでしょう。recenterrepeat

アドバイスisearch-forward自体は、私が最初に上で提案したフックを追加することと同等であり、繰り返しの検索には効果がないようです。フックを追加する方が簡単で、私はより慣用的だと思うので、関数にアドバイスするよりもおそらく好まれるはずです。

于 2012-06-15T15:08:57.270 に答える
4

ニコラスとグレッグに感謝します。

あなたの提案は私に正しい方向を示しました。これは私が求めていたものを達成するためのコードです:

(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)

乾杯!

于 2012-06-20T16:24:40.910 に答える
1

の後defadviceに実行するために使用できます。recenter-top-bottomisearch-forward

于 2012-06-15T15:07:36.397 に答える