Emacs Comment-Region في وضع C.
سؤال
في GNU emacs ، هل هناك طريقة جيدة لتغيير أمر التعليقات في وضع C
/* This is a comment which extends */
/* over more than one line in C. */
ل
/* This is a comment which extends
over more than one line in C. */
؟ لقد حاولت
(setq comment-multi-line t)
لكن هذا لا يساعد. هناك قسم عن التعليقات متعددة الخطوط في دليل EMACS, ، لكنه لا يذكر أي شيء.
المحلول
منذ Emacs 21 ، كانت هناك وحدة تسمى 'newcomment
, ، التي لها أنماط تعليقات مختلفة (انظر المتغير 'comment-styles
. يقترب هذا الإعداد مما تريد:
(setq comment-style 'multi-line)
(ملاحظة: ربما يجب عليك إجراء هذا الإعداد 'c-mode-hook
).
ومع ذلك ، فإن أيا من الإعدادات تجعل التعليقات تبدو مثل ما تريد.
أسهل طريقة رأيتها للحصول على ما تريد هي إضافة هذا الاختراق:
(defadvice comment-region-internal (before comment-region-internal-hack-ccs activate)
"override 4th argument to be just spaces"
(when (eq major-mode 'c-mode) ; some condition here
(let ((arg (ad-get-arg 4)))
(when arg
(ad-set-arg 4 (make-string (length arg) ?\ ))))))
الإعدادات الحالية ل comment-style
بادئة دائمًا خطوط التعليق مع " *" (إن لم يكن الكامل " / *").
إذا لم يكن لديك emacs 21 ، أفترض أنه يمكنك ببساطة التنزيل newcomment.el
من المستودع. لا أعرف ما إذا كان يعمل كما هو في الإصدارات السابقة من EMAC ، ولكن قد يكون الأمر يستحق اللقطة ، على الرغم من أن ترقية EMACs سيكون حلاً أفضل.
اختراق بلدي يكسر 'uncomment-region
. سيكون الإصلاح المناسب هو التغيير 'comment-padright
. سيستغرق ذلك المزيد من البحث حتى لا يكسر أشياء أخرى. الاختراق أعلاه يغير فقط السلوك في 'c-mode
(اضبط الشرط حسب رغبتك).
نصائح أخرى
الأقرب الذي يمكن أن أجده مع دعم التعليق المدمج هو إذا قمت بتعيين comment-style
ل multi-line
, ، والتي ستنتج هذا:
/* This is a comment which extends
* over more than one line in C. */
إذا لم يكن ذلك قريبًا بما فيه الكفاية ، ألق نظرة على newcomment.el
وتحديد وظائف التعليق الخاصة بك حسب الاقتضاء.