Inserisci il blocco di codice in Markdown R con yasnippet e polymode


10

Sto cercando di scrivere un yasnippet per inserire blocchi di codice in un file R Markdown. Uso polymode per avere più modalità principali (markdown, ESS [S]) in un singolo file. Questo è il mio frammento:

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

Quando provo a inserire lo snippet in un file .Rmd in modalità markdown, ottengo questo errore:

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

Lo snippet appare e il mio cursore si trova nella posizione corretta (proprio prima della seconda parentesi graffa):

```{r }

```

Quando premo la scheda ottengo quanto segue:

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

Sto indovinando che sto incontrando un'interazione con polymode: sono in modalità markdown quando inserisco lo snippet, ma poi polymode converte il contenuto del blocco di codice in modalità ESS [S]. Sembra che alla fine ci sarà un comando per inserire un nuovo blocco nel polymode, ma nel frattempo c'è un modo per far funzionare questo snippet?

Risposte:


6

Ho riscontrato un problema simile e ho scritto una funzione autonoma per aggirare le strane interazioni tra yasnippete polymode.

La seguente funzione imita il comportamento dello snippet che hai provato, richiedendo prima le informazioni di intestazione, che vengono inserite nel tuo $1, e poi facendoti cadere nel corpo grosso (il tuo $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))

Grazie per questo. Sono un appassionato utente di emacs ma ho familiarità con lisp, puoi descrivere come implementare questa funzione Rmd workflow ??
chandler,

4
Inserisci il codice nel tuo file .emacs, in modo che venga caricato ogni volta che avvii Emacs. Quindi puoi chiamarlo tramite M-x tws-insert-r-chunk. Probabilmente vorrai associare questo comando a una scorciatoia da tastiera: qui ci sono molte domande sull'impostazione delle combinazioni di tasti.
Tyler,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.