2013-04-02 7 views
6

एक संगठन-मोड फ़ाइल में की तरह कोड के साथ निम्नलिखित:इंडेंट कोड

#+begin_src emacs-lisp 
(add-to-list 'org-tab-before-tab-emulation-hook 
      (lambda() 
       (when (within-the-body-of-a-begin-src-block) 
       (indent-for-tab-command--as-if-in-lisp-mode)))) 
#+end_src 

मैं टैब कुंजी की तरह यह होगा के रूप में कोड इंडेंट करने के लिए होता है अगर यह एक बफर में थे लिस्प मोड में।

क्या मैं जरूरत है:

  • एक तरह से बाहर है कि क्या कर्सर एक src ब्लॉक के भीतर है लगाने की। इसे हेडर लाइन पर ही ट्रिगर नहीं करना चाहिए, क्योंकि उस स्थिति में डिफ़ॉल्ट ऑर्गे फोल्डिंग होनी चाहिए।
  • शीर्षलेख में निर्दिष्ट मोड (emacs-lisp) के अनुसार कोड को इंडेंट करने का एक तरीका।

संगठन पहले से ही मोड के अनुसार स्रोत ब्लॉक को हाइलाइट कर सकता है, और टैब हुक वहां हैं। यह सक्षम लगता है।

(defun indent-org-src-block-line() 
    "Indent the current line of emacs lisp code." 
    (interactive) 
    (let ((info (org-babel-get-src-block-info 'light))) 
    (when info 
     (let ((lang (nth 0 info))) 
     (when (string= lang "emacs-lisp") 
      (let ((indent-line-function 'lisp-indent-line)) 
      (indent-for-tab-command))))))) 

(add-to-list 'org-tab-before-tab-emulation-hook 
      'indent-org-src-block-line) 

यह केवल Emacs-तुतलाना ब्लॉक संभालता है:

+1

चूंकि आप वर्तमान कोड संपादित कर रहे हैं, तो संपादन मोड में प्रवेश करने के लिए 'सी-सी '' '' पर्याप्त होगा? – gongzhitaao

+0

हां, मुझे उस शॉर्टकट के बारे में पता है, लेकिन कई छोटे स्निपेट्स को संपादित करते समय यह बहुत भारी लगता है, जैसे कि emacs config-in-org फ़ाइल में। – user103576

+0

इस [थ्रेड] (http://lists.gnu.org/archive/html/emacs-orgmode/2012-02/msg00847.html) पर उपयोगी हो सकता है – gongzhitaao

उत्तर

1

यहाँ एक किसी न किसी तरह समाधान है। मैंने केवल src ब्लॉक un-indent (ऑर्ग डिफ़ॉल्ट नहीं) के साथ परीक्षण किया है।

सामान्य रूप से एक मोड को दूसरे के अंदर काम करना मुश्किल है - कई कीबोर्ड कमांड संघर्ष करेंगे। लेकिन कुछ अधिक बुनियादी स्ट्रोक, जैसे इंडेंट के लिए टैब, न्यूलाइन, टिप्पणी (संगठन # के साथ लिस्प कोड पर टिप्पणी करेगा, जो गलत है) ऐसा लगता है कि उन्हें काम करने के लिए बनाया जा सकता है और इसका सबसे बड़ा असर होगा।

9

बस कोड ब्लॉक और प्रेस प्रतिलिपि '

यह elisp-मोड में एक बफर पॉप अप होगा में बिंदु को स्थानांतरित, वाक्य रचना विज्ञापन सभी higlighting ...

1
(defun my/org-cleanup() 
    (interactive) 
    (org-edit-special) 
    (indent-buffer) 
    (org-edit-src-exit)) 

यह करना चाहिए, जहां ` मांगपत्र-बफर 'के रूप में परिभाषित किया गया है:

(defun indent-buffer() 
    (interactive) 
    (indent-region (point-min) (point-max))) 
15

Emacs 24.1 के बाद से अब आपको निम्न विकल्प सेट कर सकते हैं:

(setq org-src-tab-acts-natively t) 

... और यह सभी स्रोत ब्लॉक को संभालना चाहिए।

+0

यह सबसे अच्छा जवाब है जिसे मैंने यह नहीं ढूंढने की उम्मीद की थी सप्ताह :-) –

+0

यास्निपेट उपयोगकर्ता जो 'yasnippet fallback loop' का सामना करते हैं, ऐसा करने पर यह थ्रेड उपयोगी हो सकता है: https://github.com/joaotavora/yasnippet/issues/761 –

संबंधित मुद्दे