Y Marknippet और पॉलीमोड के साथ R Markdown में कोड चंक डालें


10

मैं एक आर मार्केड फ़ाइल में कोड विखंडू डालने के लिए एक यस्नीपेट लिखने की कोशिश कर रहा हूं। मैं एक ही फाइल में कई प्रमुख मोड (मार्कडाउन, ESS [S]) करने के लिए पॉलीमोड का उपयोग करता हूं। यह मेरा स्निपेट है:

# -*- mode: snippet -*-
# name: chunk
# key: chunk
# --
\`\`\`{r $1}
$0
\`\`\`

जब मैं स्निपेट को एक .Rd फ़ाइल में मार्कडाउन मोड में सम्मिलित करने का प्रयास करता हूं, तो मुझे यह त्रुटि मिलती है:

Error in post-command-hook (yas--post-command-handler): (error "Marker points into wrong buffer" #<marker at 7 in test.Rmd>)

स्निपेट दिखाई देता है और मेरा कर्सर सही जगह पर है (दूसरे घुंघराले ब्रेस से ठीक पहले):

```{r }

```

जब मैं टैब मारता हूं तो मुझे निम्नलिखित मिलते हैं:

yas-next-field: Wrong type argument: overlayp, nil

मैं अनुमान लगा रहा हूं कि मैं पॉलीमोड के साथ बातचीत में भाग रहा हूं: जब मैं स्निपेट सम्मिलित करता हूं, तो मैं मार्कडाउन मोड में हूं, लेकिन फिर पॉलीमोड कोड चंक की सामग्री को ईएसएस [एस] मोड में परिवर्तित कर देता है। ऐसा लगता है कि अंततः पॉलीमोड में एक नया हिस्सा डालने की आज्ञा होगी, लेकिन इस बीच इस स्निपेट को प्राप्त करने का कोई तरीका है?

जवाबों:


6

मैं इसी तरह के मुद्दे पर भाग गया, और बीच yasnippet- बीच में अजीब बातचीत करने के लिए एक स्टैंड-अलोन फ़ंक्शन लिखा polymode

निम्नलिखित फ़ंक्शन ने आपके $1द्वारा आजमाई गई स्निपेट के व्यवहार की नकल की, हेडर की जानकारी के लिए पहले संकेत दिया, जो आपके पर डाला जाता है , और फिर आपको chunck body (अपने $0) में छोड़ देता है:

(defun tws-insert-r-chunk (header) 
  "Insert an r-chunk in markdown mode. Necessary due to interactions between polymode and yas snippet" 
  (interactive "sHeader: ") 
  (insert (concat "```{r " header "}\n\n```")) 
  (forward-line -1))

इसके लिए धन्यवाद। मैं एक शौकीन चावला emacs उपयोगकर्ता हूँ, लेकिन लिस्प से परिचित हूँ, क्या आप बता सकते हैं कि आप इस फ़ंक्शन को कैसे लागू करते हैं Rmd वर्कफ़्लो ??
चांडलर

4
कोड को अपनी .emacs फ़ाइल में रखें, इसलिए हर बार जब आप Emacs शुरू करते हैं तो यह लोड हो जाता है। तब आप इसके माध्यम से कॉल कर सकते हैं M-x tws-insert-r-chunk। संभवतः आप इस कमांड को कीबोर्ड शॉर्टकट से बांधना चाहेंगे - कीबाइंडिंग सेट करने के बारे में यहाँ बहुत सारे प्रश्न हैं।
टायलर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.