تلقائيا إغلاق الأقواس في Emacs ؟
سؤال
لقد رأيت البرنامج المساعد همة يسمى إغلاق تلقائي (اكتشفت من هذا post) الذي يضيف تلقائيا قوس الإغلاق عند كتابة '(', '{' الخ.
على سبيل المثال ؛ عندما اكتب ما يلي ( |
هو المؤشر):
int main(|
أود إغلاق )
يدرج تلقائيا بالنسبة لي:
int main(|)
لا أحد يعرف من ميزة مشابهة ل emacs - جوجل فشلت هذه المرة!
المحلول
هناك أيضا 'paredit
.على ورقة الغش يظهر لك جميع الأوامر المتوفرة.يحدث مثل ذلك أفضل من الوضع الكهربائي اقترح في جواب آخر.على الرغم من paredit لا تنطبق إلا على (), لذلك قد لا ميد الاحتياجات الخاصة بك.
لكن بصراحة هناك مجموعة من الحزم المحيطة قوسين.ويكي لديه كل منهم المدرجة هنا.طرق معالجة سؤالك هي:
نصائح أخرى
(defun electric-pair ()
"If at end of line, insert character pair without surrounding spaces.
Otherwise, just insert the typed character."
(interactive)
(if (eolp) (let (parens-require-spaces) (insert-pair))
(self-insert-command 1)))
وثم تمكينها من خلال ربط الأحرف المناسبة لذلك في وسائل البرمجة المفضلة لديك. على سبيل المثال، لPythonMode:
(add-hook 'python-mode-hook
(lambda ()
(define-key python-mode-map "\"" 'electric-pair)
(define-key python-mode-map "\'" 'electric-pair)
(define-key python-mode-map "(" 'electric-pair)
(define-key python-mode-map "[" 'electric-pair)
(define-key python-mode-map "{" 'electric-pair)))
ويوفر وضع CPerl في ذلك المضمن:
;; from my .emacs
(add-hook 'cperl-mode-hook
(lambda ()
(setq cperl-hairy nil
abbrev-mode t ;; automatic keyword expansion
cperl-highlight-variables-indiscriminately t
cperl-auto-newline t
cperl-auto-newline-after-colon t
cperl-regexp-scan nil
cperl-electric-keywords t
cperl-electric-linefeed t
cperl-electric-parens nil) ;; <------ electric parens!
وسائط أخرى يمكن أن يوفر شيئا من هذا القبيل.
تحديث:
ومنذ أن نشر هذه الإجابة، لقد اكتشفت Autopair وهي جميلة الكمال كثيرا نظام لهذه الحالة استخدام. لقد تم استخدامه كثيرا، وتحبه.
وأنا ستعمل نيكرو هذا الموضوع وتقديم بديل آخر. وهناك مشروع جديد بدأت مؤخرا أن يتعامل مع لصناعة السيارات في الإدراج من أزواج، والتفاف من المناطق، والملاحة في جميع أنحاء تعبيرات متوازنة والكثير الكثير. قائمة من الميزات طويلة جدا لإعطاء هنا، ولذا فإنني سوف تصل فقط إلى smartparens جيثب الريبو حيث يمكنك قراءة التمهيدي المفصل .
ومن شاملة من AutoPair سبق ذكره وتوفر معظم المعالم الأساسية لparedit (ويشمل جميع أنواع أزواج مختلفة، وليس فقط تلك التي تعترف بها ايماكس تركيب الجداول).