2012-06-15 9 views
8

ありがとうございました。Emacs:iseach-forwardとrecenter-top-bottomを組み合わせる

私はiseach-forward(C-s)を使いたいのですが、ハイライトされたfount単語が画面の中央に表示されるのではなく、一番下のほうが中心です。

私は自分自身が継続的にこれをやって見つける:

C-Sのfoo C-S C-S C-S ... ああ!それは私が探していた「foo」です! C-l

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

乾杯

答えて

1

あなたはisearch-forwardrecenter-top-bottomを実行するためにdefadviceを使用することができます。

5

最善のアプローチは、おそらく以下のフックを追加することです:

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

これが成功するたびにインクリメンタルサーチが完了した時点でrecenter-top-bottomコマンドを実行します。

編集:私は、ビットを調べてきたが、同じ文字列を繰り返し検索で実行される機能(すなわち、アクティブ探索中C-s又はC-rの連続入力で)isearch-repeat-forward及び/又はisearch-repeat-backwardであるように見えます。あなたが同様にすべての繰り返しにrecenterはしたい場合は、そのため、あなたがそうのように、上記のフックを定義することに加えて、言った機能を助言する必要があります。個人的に

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

、私は結果の動作は非常に迷惑して方向感覚を失わであることを見つけますしかし、デ・グスタフ・ノン・エスト・ディスputandum。おそらくに使用するためにrecenter-top-bottomを予約し、repeatの機能へのアドバイスではrecenterだけを使用することはあまり有害ではありません。

アドバイスisearch-forwardは、上記で最初に示唆したフックの追加に相当し、繰り返し検索には一見影響しません。フックを追加する方が簡単ですし、もっと慣れていると思いますので、おそらく関数のアドバイスよりも優先されるはずです。

3

NicolasとGregに感謝します。

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

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

説明:

私は悪(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) 

乾杯!