2011-12-05 17 views
9

एक .Rnw दस्तावेज़ में R कोड मात्रा का उपयोग करते समय, Emacs स्वचालित रूप से बफ़र पता लगाता है कि कर्सर एक कोड हिस्सा (यानी <<>> और @ के अंदर) के भीतर है, और ईएसएस-मोड पर स्विच करता है - यह बहुत ही मूल्यवान है क्योंकि एक ईएसएस प्राप्त कर सकते है कोड-टुकड़ा के भीतर आधारित कोड-स्वरूपण, और अधिक-उपयोगी, एक अवर *R* प्रक्रिया-बफर करने के लिए कोड लाइनों/क्षेत्रों भेज सकते हैं।Emacs, आर, संगठन मोड: कैसे आर कोड ब्लॉक के भीतर ईएसएस-मोड के लिए स्वचालित स्विच सक्षम करने के लिए?

मैं R कोड ब्लॉक (यानी #+begin_src R और #+end_src के बीच) के भीतर एक संगठन-मोड फ़ाइल में ही कार्यक्षमता कैसे मिलता है - मैं Emacs स्वचालित रूप से इसे एक आर कोड कोड ब्लॉक के भीतर है समझते हैं, और ईएसएस पर चालू करना चाहते हैं -मोड तो मैं *R* प्रक्रिया में कोड के स्निपेट भेज सकता हूं। मुझे पता है कि मैं Ctl-C ' करते हैं और एक अलग ईएसएस-मोड बफर जहाँ मैं कोड को संपादित करने और (R करने के लिए कोड भेजने सहित) अन्य सभी ईएसएस-मोड उपयुक्तता प्राप्त कर सकते हैं करने के लिए स्विच कर सकते हैं कर रहा हूँ। हालांकि मैं चाहते हैं, उसके नहीं, यह करने के लिए है अर्थात मैं एक ही ऑर्ग मोड बफर में आर कोड ब्लॉक से कोड-के टुकड़े भेजने में सक्षम होना चाहता हूँ।

+0

एक [mmm-mode] (http://www.emacswiki.org/emacs/MmmMode) है - यह आपकी मदद कर सकता है। मैंने कभी इसका इस्तेमाल नहीं किया। – Adobe

उत्तर

4

एक साल पहले या तो, मैंने ऑर्ग-मोड-सूची पर same question से पूछा। @ cm2 ने पहले ही उल्लेख किया है कि ऑर्ग-मोड के भीतर ईएसएस कार्यक्षमता का उपयोग करना संभव नहीं है; जहां तक ​​मुझे पता है कि Emacs दो प्रमुख तरीकों को संभालने में सक्षम नहीं है और यहां तक ​​कि एमएमएम-मोड के साथ कुछ कठिनाइयों लगते हैं।

डैन डेविसन ने कृपया कुछ elisp-code पोस्ट किया जो कुछ ईएसएस सुविधाओं की नकल करता है। तो, आप मेरे प्रश्न के लिए दान के उत्तरों की जांच करना चाहेंगे।

+0

धन्यवाद @ बर्ड। आपके द्वारा जरूरी ईमेल थ्रेड मुझे आवश्यक अधिकांश कार्यक्षमताओं को संबोधित करने लगता है।मुझे आर कोड ब्लॉक से आर प्रक्रिया में कोड भेजने के लिए "शिफ्ट-एंटर" को सक्षम करने के तरीके की जांच करनी है। तब मैं पूरी तरह से तैयार हो जाऊंगा। मैं आपका स्वीकार्य उत्तर के रूप में चयन कर रहा हूं, क्योंकि यह लगभग पूर्ण समाधान के साथ एक वास्तविक ईमेल थ्रेड की ओर इशारा करता है। –

4

AFAIK, यह संगठन मोड के वर्तमान कार्यान्वयन के साथ नहीं किया जा सकता है।

मुझे यकीन नहीं है कि यह ऑर्गे-मोड के भीतर कुछ भी करने योग्य है बिना कुछ elisp कोड में delving। संगठन-मोड में C-c ' आदेश का मुख्य बिंदु है, ताकि आप एक अतिरिक्त बफर सभी वाक्यविन्यास पर प्रकाश डाला है कि आप चाहते हैं/अपने विशेष भाषा के लिए की जरूरत है कि है।

वहाँ शायद कुछ संगठन मोड हुक है कि पहले की जाँच करता है अगर आप एक #+begin_src R ... #+end_src R ब्लॉक में हैं देखने के लिए लेखन, और फिर एक कोड हिस्सा के लिए जाँच करके R विशिष्ट कोड के लिए इस के आसपास हैक करने का तरीका है। मुझे संदेह है कि यह अन्य संगठन मोड सुविधाओं के साथ गन्दा और संघर्ष होगा। इसके अलावा, आप एक और समारोह वर्तमान कोड ब्लॉक हड़पने और, संगठन-मोड के R दुभाषिया के लिए इसे पारित सभी विकल्पों को आप src ब्लॉक करने के लिए जोड़ा के साथ करने के लिए लिखने के लिए होगा।

+0

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

0

पॉलीमोड पैकेज में पॉली-ऑर्ग.ल, ऑर्गे-मोड में एकाधिक मोड संपादन को संबोधित करने के लिए डिज़ाइन किया गया है। मैंने कोशिश की, लेकिन यह अप्रत्यक्ष बफर में जिट-लॉक को सक्षम करने के कारण Emacs को फ्रीज करता है।

0

एक वर्कअराउंड मैन्युअल रूप से आवश्यकतानुसार मोड के बीच टॉगल कर रहा है, उदाहरण के लिए, निम्नलिखित कोड को .emacs में जोड़ना और F6 का उपयोग करना।

;; Toggle between org & R modes. 
(defun toggle-org-R-mode() 
    (interactive) 
    "Toggle mode between org-R modes" 
    (cond 
    ((string= major-mode "org-mode") 
    (R-mode)) 
    ((string= major-mode "ess-mode") 
    (org-mode)) 
    ) 
) 
(global-set-key [f6] 'toggle-org-R-mode)