2012-06-15 2 views
8

도와 주셔서 대단히 감사합니다.이맥스 : 앞으로 및 앞으로 합계

Emacs에서는 iseach-forward (C-s)를 사용하고 싶지만 강조 표시된 fount 단어가 맨 아래가 아닌 화면 중간에 오게되면 더 좋아할 것입니다. 내가 찾을 수

자신이 지속적으로 일을 :

C-의 foo는 C-의 C-의 C-의 ... 오! 그게 내가 찾고 있던 'foo'야! C-l

화면 중앙에 검색 결과를 가운데에 배치 할 수있는 방법이 있습니까?

건배

답변

1

당신은 isearch-forwardrecenter-top-bottom을 실행하는 데 defadvice를 사용할 수 있습니다.

5

가장 좋은 방법은 아마도 다음과 같은 후크를 추가하는 것입니다 :

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

이것은 모든 성공적인 증분 검색 완료시 recenter-top-bottom 명령을 실행합니다.

편집 : I 조금 조사했으며, (활성 검색 중에 C-s 또는 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을 예약하고 repeat 함수에 대한 조언에서 recenter만을 사용하면 덜 불쾌 할 것입니다.

자문 isearch-forward은 원래 위에서 제안한 후크를 추가하는 것과 같으며 반복 검색에는 영향을 미치지 않습니다. 후크를 추가하는 것이 더 간단하고 좀 더 관용적이라고 생각하므로 기능을 조언하는 것보다 선호해야합니다.

3

감사합니다. Nicolas and 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) 

설명 :

내가 이블 (이맥스에서 정력 모드)을 사용하는 것이 추가하는 일을 더 복잡 할, 그래서하지 않았다 내 질문에 그 생략.

나는 앞으로 탐색 할 때 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) 

건배 (테스트하지!) : 악하지 않는 코드는 다음과 같을 것이다 사용자의

!