2012-06-15 90 views
8

非常感謝您的幫助。Emacs:Combine iseach-forward和recenter-top-bottom

在Emacs中,我喜歡使用iseach-forward(C-s),但是如果高亮顯示的字詞集中在屏幕中間而不是最底部,我更喜歡它。

我覺得自己這個做持續:

C-S富 C-S C-S C-S ... 哦!這就是我尋找的'foo'! C-l

有沒有辦法將搜索結果居中在屏幕中間?

乾杯

回答

1

你可以使用defadviceisearch-forward後運行recenter-top-bottom

5

最好的辦法可能是添加以下鉤:

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

這將在每一個成功的漸進式搜索完成執行recenter-top-bottom命令。

編輯:我調查研究了比特,並且被(活性搜索期間即,具有的C-sC-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) 

就個人而言,我覺得產生的行爲是非常惱人的和令人迷惑,但是de gustibus non est disputandum。也許保留recenter-top-bottom用於初始isearch-mode-end-hook和單獨使用recenter建議repeat功能將不太討厭。

爲自己提供諮詢isearch-forward相當於添加上面我最初建議的掛鉤,看起來對重複搜索沒有影響。添加鉤子更簡單,我認爲更習慣,所以它可能應該優先於建議的功能。

3

謝謝尼古拉斯和格雷格。

您的建議指出了我正確的方向。 這是爲了完成我問了代碼:

(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)函數。這種行爲是瘋狂的,因爲它將第一個搜索到的項目集中在屏幕中間,第二個居中,第三個居中。我只是使用函數'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) 

乾杯(未測試!)!