विधानसभा स्रोत कोड में बेहतर इंडेंटेशन और नेविगेशन


13

जब मैं सी या जावा कोड लिखता हूं तो यह अत्यंत नियमित होता है, लेकिन असेंबली ( asm-mode) के साथ, यह इतना अव्यवस्थित है।

मैं उपयोग कर रहा हूँ auto-completeऔर yasnippet। मैंने स्निपेट्स बनाए और उनका उपयोग कर रहा हूं, लेकिन कोड संगठन और इंडेंटेशन अव्यवस्थित हैं।

क्या पैकेज मुझे मदद करेगा:

  • आसानी से कोड को इंडेंट करें और ठीक से टिप्पणी करें, ताकि मैं देख सकूं कि कोड का प्रत्येक टुकड़ा क्या कर रहा है;
  • कोड के उस बड़े द्रव्यमान को नेविगेट करें, तो मैं आसानी से कोड के टुकड़ों के बीच कूद सकता हूं?

3
कृपया अपने प्रश्न को अधिक विशिष्ट बनाने का प्रयास करें। उदाहरण के लिए: आपको क्या लगता है कि क्या करना asm-modeचाहिए, लेकिन क्या नहीं? (क्या विशेषताएं याद आ रही हैं?)
कांस्टेंटाइन

2
EmacsWiki विधानसभा के लिए सूचीबद्ध कुछ विकल्प हैं। लेकिन कृपया अपने प्रश्न को समस्या के बारे में और अधिक विशिष्ट होने के लिए संपादित करें और आपने अब तक क्या किया है। "कोई भी उपयोगी पैकेज" बहुत सारे जमीन को कवर करता है।
दान

इस प्रश्न को बंद क्यों करें? इंडेंटेशन कार्य करना ( asm-modeहर चीज के लिए अलग तरह से व्यवहार करता है) और एक सभ्य वातावरण (चारों ओर कूदो, कोड पूरा करना) को कॉन्फ़िगर करना एक वैध संगीत कार्यक्रम है।
Tu Do

1
इस प्रश्न को फिर से खोलने वाले उपयोगकर्ताओं के लिए, कृपया इस मेटा चर्चा को देखें । कृपया प्रश्न को साफ़ करने और इसे स्पष्ट करने में मदद करें, अन्यथा यह एक गैर-तुच्छ मौका है जो अन्य उपयोगकर्ता इसे फिर से बंद करने के लिए मतदान करेंगे।
दान

जवाबों:


11

बस बिल्ट-इन का उपयोग करें asm-mode। यह आपको किसी भी विधानसभा भाषाओं के लिए वाक्य रचना हाइलाइटिंग देता है। gas-modeऐसा नहीं करता है और एटी एंड टी सिंटैक्स के साथ प्रयोग करने योग्य नहीं है।

यदि आप इसके लिए इंडेंटेशन सेट करना चाहते हैं asm-mode, तो ध्यान दें कि आप इसका उपयोग नहीं कर सकते हैं tab-widthलेकिन tab-stop-listयह उन स्पेस को निर्दिष्ट करता है जो 1 टैब, 2 टैब, 3 टैब ... प्रदर्शित कर सकते हैं:

(setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
                      64 68 72 76 80 84 88 92 96 100 104 108 112
                      116 120))

उपरोक्त उदाहरण का मतलब है कि मुट्ठी टैब में 4 स्थान हैं, 2 टैब (पहले टैब के बगल में) में 8 रिक्त स्थान हैं, तीसरे टैब (दूसरे टैब के बगल में) में 12 स्थान हैं ... और इसी तरह।

आप इस तरह की सूची भी बना सकते हैं:

(setq tab-stop-list (number-sequence 2 60 2))

number-sequenceसंख्या की एक सूची बनाता है, जिसमें शुरुआती संख्या 2(पहला तर्क) 60(दूसरा तर्क) तक, प्रत्येक संख्या 2इसके आगे की संख्या से भिन्न होती है । और newline-and-indentRET से बंधना याद रखें , इसलिए Emacs स्वचालित रूप से आपके लिए इंडेंट करता है।

यदि आप चारों ओर छलांग लगाना चाहते हैं, तो इस तरह से Ctags का उपयोग करें:

ctags -e -R

-eइसका मतलब है कि टैग डेटाबेस का उपयोग Emacs द्वारा किया जाता है। -Rपरियोजना की जड़ से उप-निर्देशिका में फ़ाइलों के लिए पुनरावर्ती टैग उत्पन्न करता है।

उसके बाद, यदि आप हेल्म का उपयोग नहीं करते हैं, तो आप Emacs में helm-etags-selectया किसी अन्य etagsक्लाइंट के आसपास कूदने के लिए उपयोग कर सकते हैं ।

संपादित करें : यहाँ एक नमूना सेटअप है:

(require 'asm-mode)
(add-hook 'asm-mode-hook (lambda ()
                           (setq indent-tabs-mode nil) ; use spaces to indent
                           (electric-indent-mode -1) ; indentation in asm-mode is annoying
                           (setq tab-stop-list (number-sequence 2 60 2))))

(define-key asm-mode-map (kbd "<ret>") 'newline-and-indent)
(define-key asm-mode-map (kbd "M-.") 'helm-etags-select)

company-completeदबाने पर आपके पास मूल पूर्णता भी हो सकती है S-TAB:

(define-key asm-mode-map (kbd "<backtab>") 'company-complete)

आप <tab>पूर्णता को ट्रिगर करने के लिए उपयोग कर सकते हैं क्योंकि दोनों एक ही कमांड को चलाते हैं <tab>और रिक्त स्थान या टैब सम्मिलित करते हैं जो आपकी सेटिंग पर निर्भर करता है । इसके साथ अच्छी बात यह है कि यदि उपलब्ध हो तो आपको मिनीबफ़र में वर्तमान में हाइलाइट किए गए उम्मीदवार का संक्षिप्त विवरण मिलता है। उदाहरण के लिए, यदि आपके पास इस तरह की परिभाषा है:M-itab-to-tab-stopindent-tabs-modecompany-mode

KeyStrokes  word    0

जब आप कर्सर को KeyStrokesअभ्यर्थी के पास ले जाते हैं , तो यह word 0मिनीबार में प्रिंट करता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.