Frage

Emacs 23.2 im emacs-Starter-Kit v1 hat C-x C-i (oder ido-imenu) (ähnlich wie Cmd + R von Sublime Text). Emacs24 im emacs-Starter-kit v2 fehlt diese Funktion.Ich fand dieses Github-Problem und eine Lösung, die versuchen, die Funktionalität wiederherzustellen.Während dies ido-imenu arbeitet in elisp-mode, es hat aufgehört zu arbeiten ruby-mode.Ich bekomme:

imenu--make-index-alist: No items suitable for an index found in this buffer
  1. Hat jemand herausgefunden, wie man das zum Laufen bringt?
  2. Warum wurde dies aus Emacs24 entfernt?
  3. Gibt es einen neuen Ersatz für diese Funktion?
War es hilfreich?

Lösung 2

Also habe ich es endlich herausgefunden, nachdem ich das gelesen habe Definieren eines Imenu-Menüs für einen Modus Abschnitt wieder im Emacs-Wiki.

Kurze Antwort:sie müssen dieses Bit zu Ihrer Anpassung hinzufügen.Fühlen Sie sich frei, mehr hinzuzufügen Zimmertypen zur Liste (ich bin nur mit Methoden zufrieden).

(add-hook 'ruby-mode-hook
          (lambda ()
            (set (make-local-variable imenu-generic-expression)
                 '(("Methods"  "^\\( *\\(def\\) +.+\\)"          1)
                   ))))

Längere Antwort:Ich habe zuerst versucht, a zu definieren ruby-imenu-generic-expression funktion und setze das auf imenu-generic-expression durch die Verwendung der 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)

Dies hat jedoch nicht funktioniert (ich würde den gleichen Fehler wie zuvor erhalten).Mehr Lesen von der Definieren eines Imenu-Menüs für einen Modus Abschnitt zeigte mir den Weg.Nun, ich bin kein elisp experte, also hier ist meine Hypothese:grundsätzlich funktioniert die obige Methode für Modi, bei denen die

der Hauptmodus unterstützt eine lokale Pufferkopie der "echten" Variablen 'imenu-generic-expression'.Wenn Ihr Modus dies nicht tut, müssen Sie sich auf einen Haken verlassen.

Das Beispiel für foo-mode machte deutlich, wie es geht für ruby-mode.Es scheint also, dass ruby-mode hat keine pufferlokale Kopie des realen imenu-generic-expression variabel.Ich kann immer noch nicht erklären, warum es in Emacs 23.2 (mit ESK v1) funktioniert hat, aber nicht auf Emacs24, aber hey, zumindest habe ich eine funktionierende Lösung gefunden.

Andere Tipps

Da die Funktion Teil von ESK ist (im Gegensatz zu etwas, das mit Emacs zu tun hat), sollten Sie den Fehler wahrscheinlich am besten Upstream melden.In einem ähnlichen Zusammenhang bietet der ESK-Hauptkonkurrent Emacs Prelude die gleiche Funktionalität (gebunden an K-k i standardmäßig) und es scheint mit dem Ruby-Modus in Emacs 24 gut zu funktionieren. Hier mehr dazu finden Sie auf ido-imenu.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top