Emacs24의 Ruby 모드 기능에 있는 ido-imenu는 어떻게 되었나요?
문제
이맥스 23.2 emacs-starter-kit v1에는 C-x C-i
(또는 ido-imenu
) (Sublime Text의 Cmd+R과 유사). 이맥스24 emacs-starter-kit v2에는 이 기능이 없습니다.나는 찾았다 이 github 문제 그리고 수정, 기능을 재현하려고 시도합니다.이 동안 ido-imenu
에서 근무 elisp-mode
, 작동이 중지되었습니다. ruby-mode
.나는 얻다:
imenu--make-index-alist: No items suitable for an index found in this buffer
- 이것을 작동시키는 방법을 알아낸 사람이 있나요?
- 왜 이것이 Emacs24에서 제거되었나요?
- 이 기능을 대체할 새로운 기능이 있습니까?
해결책 2
그래서 결국 그 내용을 읽고 나서 깨달았습니다. 모드에 대한 메뉴 메뉴 정의 부분 다시 emacs-wiki에서.
짧은 답변:이 비트를 사용자 정의에 추가해야 합니다.더 추가해 보세요. 종류 목록에 추가합니다(방법만으로 만족합니다).
(add-hook 'ruby-mode-hook
(lambda ()
(set (make-local-variable imenu-generic-expression)
'(("Methods" "^\\( *\\(def\\) +.+\\)" 1)
))))
더 긴 답변:나는 처음에 ruby-imenu-generic-expression
기능을 설정하고 imenu-generic-expression
을 사용하여 ruby-mode-hook
:
(defvar ruby-imenu-generic-expression
'(("Methods" "^\\( *\\(def\\) +.+\\)" 1))
"The imenu regex to parse an outline of the ruby file")
(defun ruby-set-imenu-generic-expression ()
(make-local-variable 'imenu-generic-expression)
(make-local-variable 'imenu-create-index-function)
(setq imenu-create-index-function 'imenu-default-create-index-function)
(setq imenu-generic-expression ruby-imenu-generic-expression))
(add-hook 'ruby-mode-hook 'ruby-set-imenu-generic-expression)
그러나 이것은 작동하지 않았습니다(이전과 동일한 오류가 발생했습니다).더 많은 읽기 모드에 대한 메뉴 메뉴 정의 부분 나에게 길을 보여주었다.이제 나는 사람이 아닙니다. elisp
전문가님, 제 가설은 이렇습니다.기본적으로 위의 방법은 다음과 같은 모드에서 작동합니다.
주요 모드는 "실제" 변수인 'imenu-generic-expression'의 버퍼 로컬 복사본을 지원합니다.귀하의 모드가 이를 수행하지 못하면 후크에 의존해야 합니다.
에 대한 예 foo-mode
어떻게 해야 하는지 명확하게 알려줬어. ruby-mode
.그래서 그것은 나타납니다 ruby-mode
실제 버퍼 로컬 복사본이 없습니다. imenu-generic-expression
변하기 쉬운.Emacs 23.2(ESK v1 포함)에서는 작동하지만 Emacs24에서는 작동하지 않는 이유를 여전히 설명할 수 없습니다. 하지만 적어도 작동하는 솔루션을 찾았습니다.
다른 팁
이 기능은 (Emacs에 포함된 기능과 달리) ESK의 일부이므로 버그 업스트림을 보고하는 것이 가장 좋습니다.관련 메모에서 ESK의 주요 경쟁자인 Emacs Prelude는 동일한 기능을 제공합니다( CC i 기본적으로) Emacs 24의 Ruby 모드에서는 제대로 작동하는 것 같습니다. 여기 자세한 내용은 다음에서 확인할 수 있습니다. ido-imenu
.