Yasnippet ve çok modlu R Markdown'a kod yığını ekleme


10

Bir R Markdown dosyasına kod parçaları eklemek için bir yasnippet yazmaya çalışıyorum. Tek bir dosyada birden fazla ana mod (markdown, ESS [S]) için çoklu mod kullanıyorum. Bu snippet'im:

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

Snippet'i markdown modunda bir .Rmd dosyasına eklemeye çalıştığımda, şu hatayı alıyorum:

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

Parçacık belirir ve imlecim doğru noktada (ikinci süslü ayraçtan hemen önce):

```{r }

```

Sekmeye bastığımda aşağıdakileri alıyorum:

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

Ben çok mod ile bir etkileşime giriyorum tahmin ediyorum: snippet'i eklerken markdown modunda değilim, ama sonra çok mod kod yığın içeriğini ESS [S] moduna dönüştürür. Nihayetinde çok modda yeni bir yığın eklemek için bir komut olacak gibi görünüyor , ancak bu arada bu snippet'i çalıştırmanın herhangi bir yolu var mı?

Yanıtlar:


6

Ben de benzer bir sorunla karşılaştık ve aralarında garip etkileşimleri etrafında almak için tek başına bir fonksiyon yazdım yasnippetve polymode.

Aşağıdaki işlev, denediğiniz snippet'in davranışını taklit eder, ilk önce kendinize eklenen başlık bilgisini ister $1ve ardından sizi chunck gövdesine (sizin $0) bırakır :

(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))

Bunun için teşekkürler. Ben hevesli bir emacs kullanıcıyım ama lisp aşina, bu işlevi Rmd iş akışını nasıl uyguladığınızı açıklayabilir misiniz?
chandler

4
Kodu .emacs dosyanıza koyun, böylece Emacs'ı her başlattığınızda yüklenir. Sonra üzerinden arayabilirsiniz M-x tws-insert-r-chunk. Muhtemelen bu komutu bir klavye kısayoluna bağlamak isteyeceksiniz - burada tuş bağlamalarını ayarlamakla ilgili birçok soru var.
Tyler
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.