Emacs

2012-05-17 14 views
7

में बहु चरित्र कोष्ठकों को परिभाषित करें Verilog में आप कोड शब्द 'शुरू' और 'अंत' इस तरह के बीच ब्लॉक संलग्न:Emacs

if(foo) begin 
    x <= 1'b0; 
    y <= 1'b0; 
end else begin 
    x <= x_d; 
    y <= y_d; 
end 

वहाँ शुरू करते हैं और Emacs में कोष्ठकों के रूप में अंत में स्थापित करने के लिए कोई तरीका है, ताकि आप किसी भी मेल खाने वाले किसी भी व्यक्ति को ढूंढने के लिए चेक-पैरों या समान का उपयोग कर सकें?

मैं (और के रूपांतरों) इस जोड़ने किया है की कोशिश की मेरी ~/.emacs फाइल करने के लिए, लेकिन यह यह पसंद नहीं करता ...

(modify-syntax-entry ?begin "(end") 
(modify-syntax-entry ?end ")begin") 

धन्यवाद।

+0

इस तरह की चीजें आमतौर पर इंडेंटेशन इंजन द्वारा संभाली जाती हैं। आप इसे वाक्यविन्यास जांचने के लिए उपयोग कर सकते हैं, उदाहरण के लिए पूरे बफर को चिह्नित करके 'इंडेंट-क्षेत्र' चलाएं। अगर फ़ाइल का अंत गलत तरीके से इंडेंट किया गया है, तो आपके पास प्रारंभ/अंत मेल नहीं है। – Lindydancer

+0

@ लिंडिडांसर धन्यवाद, लेकिन मैं कोड पर काम कर रहा हूं जिसे कई लोगों द्वारा संपादित किया जा रहा है, सभी अलग-अलग संपादकों का उपयोग करते हैं, और अक्सर कोड के विभिन्न वर्ग अलग-अलग तरीकों से इंडेंट किए जाते हैं। इसके अलावा कुछ फाइलें बहुत लंबी होती हैं, और सभी 'इंडेंट-सेक्टर' का चयन करने में काफी समय लग सकता है ... – kiteflyingmonkey

+0

उस स्थिति में, मैं एक कस्टम पैकेज लिखना शुरू कर दूंगा जो शुरुआती/अंत जोड़े से मेल खाता है। यह मामूली नहीं है, लेकिन मुझे लगता है कि यह elisp में एक अच्छा अभ्यास होगा, अगर आप इसके लिए नए हैं। – Lindydancer

उत्तर

2

अफसोस की बात है कि, Emacs के ब्रांड्स मिलान बुनियादी ढांचे में बहु-चरित्र टोकन का अधिक अर्थ नहीं है। Emacs-23.4 में जोड़ा गया नया लाइब्रेरी SMIE आंशिक रूप से इस मुद्दे को हल करने का इरादा है। यह प्रमुख मोड को भाषा के सिंटैक्स (बहुत सीमित प्रकार के व्याकरण में) का वर्णन करने देता है जिसके बाद सी-एम-एफ और सी-एम-बी जैसी चीजें तार्किक तत्वों पर कूदने के बारे में जानेंगी, उदा। begin से end पर मिलान करने के लिए छोड़ें। लिंडडी डांसर के नोट्स के रूप में, इस तरह की चीजें आमतौर पर इंडेंटेशन के लिए आवश्यक होती हैं, और वास्तव में एसएमआईई के पीछे मुख्य प्रेरणा एक सामान्य इंडेंटेशन इंजन प्रदान करना था।

अब वेरिलोग एसएमआईई का उपयोग नहीं करता है लेकिन यह समान नेविगेशन कमांड को लागू करता है। तो आप शायद

(defun sm-verilog-check-parens() 
    (save-excursion 
    (goto-char (point-min)) 
    (while (not (eobp)) 
     (verilog-forward-sexp)))) 

थो तरह कुछ मुझे नहीं पता की कोशिश करता है, तो verilog-forward-sexp आप उचित चेतावनी/त्रुटियों दे देंगे अगर यह एक अप्रत्याशित क्षण में बफर के अंत में मुलाकात कर सकते हैं।