Pregunta

Emacs 23.2 en emacs-starter-kit v1 tiene C-x C-i (o ido-imenu) (similar a Cmd+R de Sublime Text). Emacs24 en emacs-starter-kit v2 carece de esta función.encontré este problema de github y un arreglo, que intentan recrear la funcionalidad.Mientras esto ido-imenu trabaja en elisp-mode, dejó de funcionar en ruby-mode.Yo obtengo:

imenu--make-index-alist: No items suitable for an index found in this buffer
  1. ¿Alguien ha descubierto cómo hacer que esto funcione?
  2. ¿Por qué se eliminó esto de Emacs24?
  3. ¿Existe un nuevo reemplazo para esta función?
¿Fue útil?

Solución 2

Así que finalmente lo descubrí, después de leer el Definición de un menú Imenu para un modo sección en emacs-wiki nuevamente.

Respuesta corta:necesitas agregar este bit a tu personalización.Siéntase libre de agregar más tipos a la lista (estoy contento con solo los métodos).

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

respuesta más larga:Primero intenté definir un ruby-imenu-generic-expression función y configúrelo en imenu-generic-expression usando el 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)

Sin embargo, esto no funcionó (obtendría el mismo error que antes).Más lectura del Definición de un menú Imenu para un modo sección me mostró el camino.Ahora, no soy un elisp experto, así que aquí está mi hipótesis:Básicamente, el método anterior funciona para modos en los que el

El modo principal admite una copia local del búfer de la variable "real", "imenu-generic-expression".Si tu modo no lo hace, tendrás que confiar en un gancho.

el ejemplo para foo-mode dejó claro cómo hacerlo para ruby-mode.Entonces parece que ruby-mode no tiene una copia local del buffer del real imenu-generic-expression variable.Todavía no puedo explicar por qué funcionó en Emacs 23.2 (con ESK v1) pero no en Emacs24, pero bueno, al menos encontré una solución que funciona.

Otros consejos

Dado que la función es parte de ESK (en comparación con algo que se estrechó con Emacs), es probable que lo haga mejor para informar el error ascendente.En una nota relacionada, EMACS principales del competidor ESK, Preludio ofrece la misma funcionalidad (unida a CC I de forma predeterminada) y parece estar funcionando bien con el modo Ruby en Emacs 24. aquí puede encontrar más en ido-imenu.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top