كيفية تحقيق تأثيرات قانون قابلة للطي في Emacs؟

StackOverflow https://stackoverflow.com/questions/1085170

  •  23-08-2019
  •  | 
  •  

سؤال

ما هي أفضل طريقة لتحقيق شيء مثل رمز قابلة للطي، أو نوع الدراجات التي يستخدمها وضع ORG. ما هو أفضل حل في Elisp لإنشاء هذا النوع من السلوك؟

تحرير: أنا آسف لم أكن واضحا. أريد أن تقوم ببرمجة شيء في Elisp الذي يقوم بأشياء مشابهة جدا لقدرة التعليمات البرمجية، أو في الواقع أكثر مثل وضع ORG مع التسلسل الهرمي الذي يمكن توسيعه. أنا أتساءل أفضل طريقة لتحقيق هذا التأثير. أعتقد أنني سمعت تراكبات EMACS هي حل جيد، لكنني لا أعرف.

بقدر ما قابلة للطي، أنا فقط استخدم عرض مجموعة انتقائية

تحرير الرقم 2:

شكرا على الإجابات لكنني أعتقد أنني أطلب سؤال خاطئ لذلك اسمحوا لي أن أحاول أن أكون أكثر وضوحا حول ما أحاول القيام به. أود إنشاء ما يلي

عند وضع وجهة نظرك على وظيفة واستدعاء وظيفة ELISP هذه، ستقوم بوضع تعريف الوظيفة من أي مكان (أفكر به فقط باستخدام علامة البحث لهذا) وتكشف عنه في المخزن المؤقت الحالي. الفكرة هي إذا كان عليك أن تقفز إلى مخزن مؤقت مختلف لقراءة تعريف الوظيفة، فأنا أشعر بمفتاح السياق إلى ملف آخر. لذلك أود أن تتصرف مثل الرمز القابل للطي فقط يسحب الرمز الخارجي من المخزن المؤقت. يعرض هذا بعض المشكلات لأنه لا يمكن لصق الشفرة بشكل حاد في المخزن المؤقت أو إذا قام شخص ما بحفظه فسوف يقوم بحفظ الرمز السحب. لذلك أتساءل عما إذا كانت هناك طريقة لإنشاء منطقة داخل المخزن المؤقت ليس أيضا جزءا من المخزن المؤقت. اعتقد ان هذا منطقي.

هل كانت مفيدة؟

المحلول

للطي بشكل عام غير ضروري مع EMACS، لأنه يحتوي على أدوات تنفذ بشكل صريح الإجراءات التي يقوم بها الأشخاص يدويا عند قابلة للطي.

معظم الناس لديهم نجاح جيد مع عمليات البحث الإضافية البسيطة. انظر "foo" المذكورة في مكان ما؟ اكتب CS.foo, ، ابحث عن التعريف، اضغط على Enter، اقرأه، ثم اضغط cx. cx. للعودة إلى أين كنت. بسيطة ومفيدة جدا.

معظم أوضاع الدعم imenu. ماجستيرimenu سوف تتيح لك الانتقال إلى تعريف وظيفة (إلخ) بالاسم. يمكنك أيضا ربطه بنقرة الماوس للحصول على قائمة من الوظائف (أو إضافتها إلى Menubar؛ راجع صفحة المعلومات لمزيد من التفاصيل). يوفر بيانات وضع الوظيفة، والذي سيتيح لك معرفة أي وظيفة في الوقت الحالي في الموديلات. (لماذا هي وظائفك هذه طويلة، رغم ذلك؟)

يوجد ايضا SpeedBar., ، والتي تعرض معلومات IMENU (وغيرها من الأشياء) بيانيا.

إذا كنت ترغب في الحصول على نظرة عامة على الملف الخاص بك، فحاول ماجستيرoccur". إعطاء Regex، وسوف يخلق مخزن مؤقت جديد مع كل مباراة في المخزن المؤقت الحالي. يمكنك البحث عن" (defun "للحصول على نظرة عامة على الوظائف التي تنفذ الملفات الحالية. النقر فوق النتيجة سيحركك إلى هذا الموقف في الملف.

على أي حال، فكر في ما تريد حقا تحقيقه، ويرمل EMACS ذلك. لا تقاتل مع أدوات غير كاملة تجعلك أضعاف وإشعال الأشياء باستمرار.

نصائح أخرى

وضع إخفاء العرض (hs-minor-mode) مع المفاتيح الافتراضية C-c @ C-M-h لتشغيل الطي (hs-hide-all)

طريقة أخرى إلى الجلد القط:

كما يحدث، لا تحتاج إلى أي حزمة أو تكوين إضافي لذلك. فقط اذهب إلى أي ملف مصدر، اكتب

M-1 CX $ والسحر يحدث!

كالعادة، إنه سحر أبيض: CX $ سوف جلب رمزك مرة أخرى.

يمكننا استخدام نظام مساعدة EMACS لاكتشاف ما يجري: الفصل K CX $ يخبرنا أن مزيج المفاتيح أعلاه هو الاتصال عرض انتقائي, ، وظيفة تأخذ حجة رقمية واحدة (بادئة M-1 تمرير 1 كقيمة هذه الحجة)، وبالتالي، تعين بشكل غير مستقر، العرض الانتقائي المتغير إلى قيمة تلك الوسيطة.

من طفيفة emacs wizardry بلوق

فقط للكمال: M-3 CX $ سوف تظهر شفرة متداخلة أعمق وهلم جرا.

FWIW صنعت مساعد صغير اليوم بناء على SMTH. وجدت هنا بحيث يتم قابلة للطي رمز F5 على أساس موقف المؤشر الحالي:

(global-set-key (kbd "<f5>") 'set-selective-display-dlw)

(defun set-selective-display-dlw (&optional level)
"Fold text indented same of more than the cursor.
If level is set, set the indent level to LEVEL.
If 'selective-display' is already set to LEVEL, clicking
F5 again will unset 'selective-display' by setting it to 0."
  (interactive "P")
  (if (eq selective-display (1+ (current-column)))
      (set-selective-display 0)
    (set-selective-display (or level (1+ (current-column))))))

يمكنني استخدام وضع الخطوط العريضة الطفيفة لخفض رمز بيثون الخاص بي. بدلا من الحاجة إلى وضع {{{{and}}} كما هو الحال في وضع قابلة للطي، يستخدم حيث يتم تعريف الكتلة.

http://www.gnu.org/software/emacs/manual/html_node/emacs/outline-mode.html. http://www.emacswiki.org/emacs/outlineeminormode.

أنا متأكد من أنها تأتي مع emacs. ثم أضيف هذا إلى بلدي .emacs

;;======= Code folding =======
(add-hook 'python-mode-hook 'my-python-outline-hook)
; this gets called by outline to deteremine the level. Just use the length of the whitespace
(defun py-outline-level ()
  (let (buffer-invisibility-spec)
    (save-excursion
      (skip-chars-forward "    ")
      (current-column))))
; this get called after python mode is enabled
(defun my-python-outline-hook ()
  ; outline uses this regexp to find headers. I match lines with no indent and indented "class"
  ; and "def" lines.
  (setq outline-regexp "[^ \t]\\|[ \t]*\\(def\\|class\\) ")
  ; enable our level computation
  (setq outline-level 'py-outline-level)
  ; do not use their \C-c@ prefix, too hard to type. Note this overides some bindings.
  (setq outline-minor-mode-prefix "\C-t")
  ; turn on outline mode
  (outline-minor-mode t)
  ; initially hide all but the headers
  ;(hide-body)
  ; make paren matches visible
  (show-paren-mode 1)
)

يمكنك أيضا الحصول على رمز CDET باستخدام CEDET مع التعليمات البرمجية التالية في ملف INIT:

(global-semantic-folding-mode t)

بعد تقييم هذا الرمز، ستظهر المثلث الصغير في منطقة فرينل، حتى تتمكن من طي وتتكشف عن التعليمات البرمجية باستخدامها. هذه الطريقة أكثر دقة، حيث تستخدم معلومات النحوية، المستخرجة من التعليمات البرمجية المصدر

يعمل وضع HS-Miniter بشكل جميل.

إنه يعمل بشكل أكثر جمالا عند الاقتران مع أضعاف Dwim (افعل ما أقصده). ثم هناك طية Dwim-Org، والتي توفر Org-Mode مثل الروابط الرئيسية لقابلة للطي! كلاهما يمكن تثبيته عبر مرارى (وأعتقد أن إلبا).

يبدو أنه لا يوجد حل مثالي، لكنني أعتقد أن الأفضل هو هذا:

http://www.emacswiki.org/emacs/foldingmode.

vimish-fold هو أيضا حل لطيف وسهل.

https://github.com/mrkkrp/vimish-fold..

من الصفحة الرئيسية:

هذه حزمة لإجراء نص قابل للطي كما في VIM. لديه الميزات التالية:

  • قابلة للطي من المناطق النشطة؛
  • ردود فعل مرئية جيدة: من الواضح أن جزء من النص مطوي؛
  • الثبات افتراضيا: عند إغلاق الملفات لا تختفي طياتك؛
  • مقاييس الاستمرار جيدا، يمكنك العمل على مئات الملفات مع الكثير من الطيات دون آثار ضارة؛
  • لا يكسر المسافة البادئة أو أي شيء؛
  • يمكن أن يتم تبديل الطيات من حالة مطوية لإشطادها والعودة بسهولة شديدة؛
  • التنقل السريع بين الطيات الحالية؛
  • يمكنك استخدام الماوس لتتكشف الطيات (جيد للمبتدئين وليس فقط لهم)؛
  • بالنسبة لعشاق حزمة AVY: يمكنك استخدام AVY لتطوي النص مع الحد الأدنى من السكتات الدماغية الرئيسية!

باستخدام ممتاز use-package أقوم بتثبيت وتفعيلها باستخدام هذا القصاص في التكوين الخاص بي:

(use-package vimish-fold
  :ensure t
  :config (vimish-fold-global-mode t))

تأتي EMACS مع وضع HS-Minor- يصرخ التعليمات البرمجية القابلة للطي بين التعبيرات المتوازنةhttp://www.emacswiki.org/emacs/hideshow.

أعتقد أن المقارنة الخاصة بك من "مشروع" الخاص بك للطي ليست جيدة جدا، لأن الطي حول تغيير المظهر مع الحفاظ على محتويات المخزن المؤقت سليمة (النص). سيتضمن مشروعك إظهار نص إضافي مع الحفاظ على محتويات المخزن المؤقت سليما، AFAIU. وبالتالي. إنه غير قابل للتنفيذ كتكوين لإدراج النص والطي (بعد ذلك، سيتم تغيير محتويات المخزن المؤقت).

ولكن ربما، فإن الأمر ممكنا بالفعل مع نفس الآلية حيث يتم طيها مع "التراكبات" ... النظر في "الخيط قبل" و "بعد السلسلة" خصائص تراكب; ؛ ربما، يمكنك وضع تعريفات وظيفتك في هذه السلاسل التي تنتمي إلى تراكب طول الصفر عند هذه النقطة. ينظر الى الخطوط العريضة للعلم وظيفة لمعرفة كيفية استخدام التراكبات في وضع الخطوط العريضة.

كما ترى hs-minor-mode, ، قد يكون من الجيد تحديد اختصار أكثر ملاءمة، على سبيل المثال:

(eval-after-load 'hideshow
 '(progn
   (global-set-key (kbd "C-+") 'hs-toggle-hiding)))

مع الإلهام من إجابة einselbst.:

(المشورة - إضافة "تعيين" عرض انتقائي: تصفية Args (Lambda (Args) (إذا (أو (Car Args) عرض انتقائي) Args (قائمة (1+ (العمود الحالي))))) "((الاسم . تعيين-انتقائي - من العمود من المؤشر))))

هاهو، C-x $ أصبح فجأة مفيدة حتى بدون أي C-u ولا M-4 اعمال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top