Emacs24中ruby模式下的ido imenu函数发生了什么变化?
在emacs初学者工具包中,v1具有Emacs24中ruby模式下的ido imenu函数发生了什么变化?,emacs,emacs24,ido,ruby-mode,Emacs,Emacs24,Ido,Ruby Mode,在emacs初学者工具包中,v1具有C-x C-i(或ido imenu)(类似于Sublime Text的Cmd+R)。在emacs初学者工具包中,v2缺少此功能。我找到并尝试重新创建功能。当这个idoimenu在elisp模式下工作时,它在ruby模式下停止工作。我得到: imenu--make-index-alist: No items suitable for an index found in this buffer 有人想出办法让它工作吗 为什么要从Emacs24中删除这个 此功能
C-x C-i
(或ido imenu
)(类似于Sublime Text的Cmd+R)。在emacs初学者工具包中,v2缺少此功能。我找到并尝试重新创建功能。当这个idoimenu
在elisp模式下工作时,它在ruby模式下停止工作。我得到:
imenu--make-index-alist: No items suitable for an index found in this buffer
有人想出办法让它工作吗
为什么要从Emacs24中删除这个
此功能是否有新的替代品
由于该函数是ESK的一部分(与Emacs的问题相反),因此您可能最好向上游报告错误。另一方面,ESK的主要竞争对手Emacs Prelude也提供了相同的功能(默认情况下绑定到C-CI),并且它似乎可以在Emacs 24中的ruby模式下正常工作。您可以在ido imenu
上找到更多信息,因为该函数是ESK的一部分(与Emacs的问题相反),所以您可能最好向上游报告错误。另一方面,ESK的主要竞争对手Emacs Prelude也提供了相同的功能(默认情况下绑定到C-CI),并且它似乎可以在Emacs 24中的ruby模式下正常工作。你可以在idoimenu
上找到更多信息,所以在再次阅读了emacs wiki上的内容后,我终于找到了答案
简短回答:您需要将此位添加到自定义中。请随意向列表中添加更多类型(我只对方法感到满意)
Longer answer:我首先尝试定义一个ruby-imenu-generic expression
函数,并使用ruby-mode-hook
将其设置为imenu-generic expression
:
(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
专家,所以我的假设是:基本上,上述方法适用于
主模式支持“real”变量“imenu generic expression”的缓冲区本地副本。如果你的模式不能做到这一点,你将不得不依靠一个钩子
foo模式
的示例清楚地说明了如何为ruby模式
执行此操作。因此,ruby模式
似乎没有realimenu泛型表达式
变量的缓冲区本地副本。我仍然无法解释为什么它在Emacs 23.2(使用ESK v1)中有效,但在Emacs 24上无效,但至少我找到了一个有效的解决方案。因此,在再次阅读Emacs wiki上的文章后,我终于找到了答案
简短回答:您需要将此位添加到自定义中。请随意向列表中添加更多类型(我只对方法感到满意)
Longer answer:我首先尝试定义一个ruby-imenu-generic expression
函数,并使用ruby-mode-hook
将其设置为imenu-generic expression
:
(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
专家,所以我的假设是:基本上,上述方法适用于
主模式支持“real”变量“imenu generic expression”的缓冲区本地副本。如果你的模式不能做到这一点,你将不得不依靠一个钩子
foo模式
的示例清楚地说明了如何为ruby模式
执行此操作。因此,ruby模式
似乎没有realimenu泛型表达式
变量的缓冲区本地副本。我仍然无法解释为什么它在Emacs 23.2(使用ESK v1)中有效,但在Emacs 24上无效,但至少我找到了一个有效的解决方案。Emacs+Emacs初学者工具包!=Emacs.Emacs+Emacs初学者工具包!=在我的问题中,我链接到的文件表明ido imenu不是ESK的一部分。更多的谷歌搜索表明它是Emacs23的一部分,但在Emacs24中被删除了。这就是我问这个问题的原因。谢谢。最终,我越来越多地阅读了你提供的链接,找到了答案。我在问题中链接到的内容表明ido imenu不是ESK的一部分。更多的谷歌搜索表明它是Emacs23的一部分,但在Emacs24中被删除了。这就是我问这个问题的原因。谢谢。最终,通过阅读你提供的链接,我找到了答案。