ماذا حدث لـ ido-imenu في وظيفة وضع روبي في Emacs24؟
سؤال
ايماكس 23.2 في emacs-starter-kit v1 لديه C-x C-i
(أو ido-imenu
) (على غرار Sublime Text's Cmd+R). إيماكس24 في emacs-starter-kit v2 يفتقر إلى هذه الوظيفة.وجدت هذه القضية جيثب و إصلاح, ، والتي تحاول إعادة إنشاء الوظيفة.بينما هذا ido-imenu
يعمل في elisp-mode
, ، توقف عن العمل في ruby-mode
.انا حصلت:
imenu--make-index-alist: No items suitable for an index found in this buffer
- هل اكتشف أحد كيفية جعل هذا يعمل؟
- لماذا تم إخراج هذا من Emacs24؟
- هل هناك بديل جديد لهذه الوظيفة؟
المحلول 2
لذلك فهمت الأمر أخيراً بعد قراءتي تحديد قائمة Imenu للوضع قسم على 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)
لكن هذا لم ينجح (سأحصل على نفس الخطأ كما كان من قبل).مزيد من القراءة لل تحديد قائمة Imenu للوضع قسم أظهر لي الطريق.الآن، أنا لست elisp
خبير، وهذه هي فرضيتي:في الأساس، تعمل الطريقة المذكورة أعلاه مع الأوضاع التي يكون فيها ملف
يدعم الوضع الرئيسي نسخة محلية عازلة من المتغير "الحقيقي"، "imenu-generic-expression".إذا لم يقم الوضع الخاص بك بذلك، فسيتعين عليك الاعتماد على الخطاف.
المثال ل foo-mode
أوضحت كيفية القيام بذلك ruby-mode
.لذلك يبدو أن ruby-mode
ليس لديه نسخة عازلة محلية من الحقيقي imenu-generic-expression
عامل.ما زلت لا أستطيع شرح سبب نجاحه في Emacs 23.2 (مع ESK v1) ولكنه لا يعمل على Emacs24، ولكن على الأقل وجدت حلاً عمليًا.
نصائح أخرى
نظرًا لأن الوظيفة جزء من ESK (على عكس شيء تم دمجه مع Emacs)، فمن الأفضل أن تقوم بالإبلاغ عن الخطأ في المراحل الأولية.في ملاحظة ذات صلة، يقدم المنافس الرئيسي لـ ESK Emacs Prelude نفس الوظيفة (مرتبطة بـ ج-ج ط افتراضيًا) ويبدو أنه يعمل بشكل جيد مع وضع روبي في Emacs 24. هنا يمكنك العثور على المزيد حول ido-imenu
.