knitr Evidenziazione Markdown in Emacs?


111

C'è qualche modifica di uno strumento esistente o di un nuovo strumento che evidenzierà la sintassi (colore) blocchi di codice R in un documento markdown knitr quando aperto in Emacs?

I blocchi knitr che sto guardando sono blocchi a triplo backtick [```]che contengono codice R all'interno.

EDIT: cose che ho provato finora:

- Ubuntu 12.04 con Emacs 23

emacs --version
GNU Emacs 23.3.1

1. Polymode

https://github.com/vitoshka/polymode/issues/3

Sto cercando di ottenere polymode per evidenziare la sintassi dei miei file Rmd, ma si lamenta di un file di caricamento 'colore':

cd ~/.emacs.d
git clone https://github.com/vitoshka/polymode.git

Nel mio file .emacs:

(add-to-list 'load-path "/home/avilella/.emacs.d/polymode/")
(add-to-list 'load-path "/home/avilella/.emacs.d/polymode/modes/")

;; Require any polymode bundles that you are interested in:

(require 'poly-R)
(require 'poly-markdown)

eval-tampone:

Cannot open load file: color

- CentOS con Emacs 24:

emacs --version
GNU Emacs 24.2.1

1. Polymode installato correttamente

Apri un file Rmd M-x polymode-minor-mode, nessuna modifica all'evidenziazione della sintassi.


emacs --version
GNU Emacs 24.3.1

1. Polymode installato correttamente

Apri un file Rmd,, M-x poly-markdown+r-modeinizia a comparire parte dell'evidenziazione della sintassi, ma ho bisogno di modificare manualmente il test in ogni blocco di codice con tre segni di spunta per mostrare completamente la sintassi.

Inserisci qui la descrizione dell'immagine

Inserisci qui la descrizione dell'immagine

La seconda immagine è subito dopo aver digitato un Return prima del blocco knitr.


10
mi piacerebbe conoscere le risposte. Ci sono voci insistenti sul fatto che i ragazzi di ESS ce la faranno, ma non l'ho ancora visto ...
Ben Bolker

3
Ho qualcosa a casa che fondamentalmente funziona. Si basa sulla modalità mumamo e sulla modalità markdown. Ho dovuto apportare un paio di modifiche alla modalità mumamo per farlo funzionare, spiegato qui: bugs.launchpad.net/nxhtml/+bug/626039/comments/5 . Seguirò qui con una risposta dopo essere arrivato a casa e ricordare cosa ho fatto.
Erik Iverson

4
Che dire di Vitalie's polymode: github.com/vitoshka/polymode
daroczig

3
@daroczig - Interessante. Qualche idea di cosa intenda per "Nessun backend di programmazione alfabetizzato", nel README's Warning! sezione?
Josh O'Brien

4
@ JoshO'Brien Nell'annuncio di ess-help di Vitalie, chiarisce cosa intendeva: "Rnw è solo un polimero. Quello che intendo per alfabetizzazione backend di programmazione è uno strumento che può elaborare / convertire il file in qualcos'altro. Come knitr o org- In questi giorni aggancerò ess-swv-weave e ess-swv-PDF nelle mappe polimodali relative a R. Dovrebbe essere abbastanza ok per il momento, dato che knitr è abbastanza intelligente da riconoscere le cose con cui ha a che fare.
Erik Iverson

Risposte:


3

Questo potrebbe aiutare: http://sjp.co.nz/posts/emacs-ess-knitr/

Markdown Knitr in Emacs tramite ESS


Siamo spiacenti ma questo riferimento è sbagliato. Attualmente Emacs-ESS non ha evidenziazione per i documenti Rmd o anche un semplice ribasso (e tra l'altro il tuo articolo collegato non lo afferma). Per quanto riguarda il primo è necessario polymode e per il secondo markdown.el. Inoltre, se tutto ciò che vuoi è semplicemente cambiare il motore ESS da Sweave a knitr (senza evidenziare!), Non c'è bisogno di passare attraverso tutte le complicazioni di questo articolo, aggiungi semplicemente il (setq ess-swv-processor 'knitr)tuo file init.
antonio

2

Il tuo problema

Prima di tutto, dici di avere GNU Emacs 23.3.1, ma in polymode readme.mdesso si legge:

Testato con Emacs 24.3.1 e 24.4.5.

Per quanto riguarda il tuo errore: "Cannot open load file: color", in polymode.el, c'è la riga:

(require 'color)

questo pacchetto è in Emacs 24, ma potrebbe mancare nella tua versione.

Soluzione

  1. Aggiorna a una versione recente (quindi supportata) di Emacs.

  2. Estrai il polymode.zip in una directory in cui mantieni il materiale Emacs, ad esempio:

    ~\conf\emacs

e cambia la polymode-masterdirectory risultante inpolymode

  1. Aggiungilo nel tuo file init (e se hai usato nomi diversi sopra, cambia i nomi sotto di conseguenza):

    ;; Just an Emacs personal dir containing polymode packages etc.
    (setq MY-EMACS  "~/conf/emacs") 
    
    (defun my-emacs  (subfolder)
    "Get path to personal dir + subfolder"
    (concat (expand-file-name MY-EMACS) "/" subfolder))
    
    ;; ESS Markdown
    ;; -------------
    (defun rmd-mode ()
      "ESS Markdown mode for rmd files"
      (interactive)
      (setq load-path 
        (append (list (my-emacs "polymode/") 
                  (my-emacs "polymode/modes/"))
            load-path))
      (require 'poly-R)
      (require 'poly-markdown)
      (poly-markdown+r-mode))
    
    ;; Wrap line in markdown. Comment if you don't dislike words cut in the middle
    (add-hook 'markdown-mode-hook (lambda () (visual-line-mode 1)))
    
    ;; Let you use markdown buffer easily
    (setq ess-nuke-trailing-whitespace-p nil)  
  2. Meta+ rmdquando il file Rmd è aperto o imposta la modalità in <!-- Local Variables: -->
    ... goditi un cambiamento radicale nella tua produttività.

PS
Non trascuri l'ultima riga elisp. Permetterà di salvare correttamente il markdown. Altrimenti, quando riaprirai il tuo documento, avrai spiacevoli sorprese.

Una nota per gli utenti Windows

Salta questo se sei un ragazzo Linux, ma, nonostante la domanda menzioni Ubuntu, la mia risposta si applica perfettamente anche a Windows Emacs. Solo rispetto a:

  • Passaggio 2) Estrai polymode.zip in:

    %USERPROFILE%\conf\emacs

    Come puoi immaginare, la variabile d'ambiente% USERPROFILE% contiene il percorso della directory del tuo profilo utente. Se non sei sicuro di cosa sia, esegui set USERPROFILEnel prompt della CLI.
    Come utente Windows potresti essere abituato a memorizzare cose in My Documents. In tal caso la tua directory sarà:

    %USERPROFILE%\Documents\conf\emacs
  • Passaggio 3) Se nel passaggio 2) è stato utilizzato il percorso %USERPROFILE%\Documents\conf\emacs, modificare di conseguenza la prima riga di codice da:

    (setq MY-EMACS  "~/conf/emacs") 

    a (nota le barre):

    (setq MY-EMACS  "~/Documents/conf/emacs") 

    In entrambi i casi (con e senza "Documenti"), potresti preferire lo stile più Windows:

    (setq MY-EMACS (substitute-in-file-name "$USERPROFILE/Documents/conf/emacs")) 
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.