knitr Markdown-Hervorhebung in Emacs?


111

Gibt es eine Änderung an einem vorhandenen oder neuen Werkzeug, mit der R-Code-Blöcke in einem Knitr-Markdown-Dokument beim Öffnen in Emacs syntaktisch hervorgehoben (farbig) werden?

Die Knitr Chunks, die ich betrachte, sind Triple-Backtick-Blöcke [```], die R-Code enthalten.

EDIT: Dinge, die ich bisher versucht habe:

- Ubuntu 12.04 mit Emacs 23

emacs --version
GNU Emacs 23.3.1

1. Polymode

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

Ich versuche, Polymode dazu zu bringen, meine Rmd-Dateien syntaktisch hervorzuheben, aber es beschwert sich über eine 'Farb'-Ladedatei:

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

In meiner .emacs-Datei:

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

Auswertungspuffer:

Cannot open load file: color

- CentOS mit Emacs 24:

emacs --version
GNU Emacs 24.2.1

1. Polymode korrekt installiert

Öffnen Sie eine Rmd-Datei, M-x polymode-minor-modeohne Änderungen an der Syntaxhervorhebung vorzunehmen .


emacs --version
GNU Emacs 24.3.1

1. Polymode korrekt installiert

Öffnen Sie eine Rmd-Datei, M-x poly-markdown+r-modeund einige der Syntaxhervorhebungen werden angezeigt. Ich muss den Test jedoch in jedem Codeblock mit drei Häkchen manuell ändern, damit die Syntax vollständig angezeigt wird.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Das zweite Bild befindet sich direkt nach der Eingabe eines Return vor dem Knitr-Block.


10
Ich würde gerne die Antworten wissen. Es gibt anhaltende Gerüchte, dass die ESS-Leute sich darum kümmern werden, aber ich habe es noch nicht gesehen ...
Ben Bolker

3
Ich habe etwas zu Hause, das im Grunde funktioniert. Es basiert auf dem Mumamo-Modus und dem Markdown-Modus. Ich musste ein paar Änderungen am Mumamo-Modus vornehmen, damit es funktioniert . Dies wurde hier erklärt: bugs.launchpad.net/nxhtml/+bug/626039/comments/5 . Ich werde hier eine Antwort geben, nachdem ich nach Hause gekommen bin und mich daran erinnern, was ich getan habe.
Erik Iverson

4
Was ist mit polymode
Vitalies

3
@ Daroczig - Interessant. Jede Idee, was er unter "Keine gebildeten Programmier-Backends" versteht, in der Warnung der README ! Sektion?
Josh O'Brien

4
@ JoshO'Brien In Vitalies Ess-Help-Ankündigung stellt er klar, was er meinte: "Rnw ist nur ein Polymode. Was ich unter Backend für literarische Programmierung verstehe, ist ein Tool, das die Datei verarbeiten / in etwas anderes konvertieren kann. Wie knitr oder org- Ich werde heutzutage ess-swv-weave und ess-swv-PDF in R-bezogene Polymode-Maps einbinden. Das sollte vorerst ganz in Ordnung sein, da knitr klug genug ist, um die Dinge zu erkennen, mit denen es zu tun hat. "
Erik Iverson

Antworten:


3

Dies könnte helfen: http://sjp.co.nz/posts/emacs-ess-knitr/

Knitr-Abschlag in Emacs durch ESS


Entschuldigung, aber diese Referenz ist falsch. Derzeit hat Emacs-ESS keine Hervorhebung für Rmd-Dokumente oder sogar einfache Markdowns (und übrigens behauptet Ihr verlinkter Artikel dies nicht). Für das erstere benötigen Sie Polymode und für das letztere markdown.el. Wenn Sie lediglich die ESS-Engine von Sweave auf knitr umstellen möchten (ohne hervorzuheben!), Müssen Sie nicht alle Komplikationen dieses Artikels durchgehen. (setq ess-swv-processor 'knitr)Fügen Sie einfach Ihre Init-Datei hinzu.
Antonio

2

Ihr Problem

Zunächst sagen Sie, Sie haben GNU Emacs 23.3.1, aber in polymode readme.mdheißt es:

Getestet mit Emacs 24.3.1 und 24.4.5.

Was Ihren Fehler betrifft: "Ladedatei kann nicht geöffnet werden: Farbe", in polymode.elgibt es die Zeile:

(require 'color)

Dieses Paket befindet sich in Emacs 24, kann jedoch in Ihrer Version fehlen.

Lösung

  1. Aktualisieren Sie auf eine aktuelle (daher unterstützte) Version von Emacs.

  2. Extrahieren Sie die Datei polymode.zip in ein Verzeichnis, in dem Sie Emacs-Material aufbewahren, z.

    ~\conf\emacs

und ändern Sie das resultierende polymode-masterVerzeichnis inpolymode

  1. Fügen Sie dies in Ihre Init-Datei ein (und wenn Sie oben andere Namen verwendet haben, ändern Sie die Namen unten entsprechend):

    ;; 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+ rmdWenn die Rmd-Datei geöffnet ist oder der Modus aktiviert ist, <!-- Local Variables: -->
    ändert sich Ihre Produktivität dramatisch.

PS
Übersehen Sie nicht die letzte Elisp-Linie. Dadurch können Markdowns ordnungsgemäß gespeichert werden. Andernfalls werden Sie beim erneuten Öffnen Ihres Dokuments unangenehme Überraschungen erleben.

Ein Hinweis für Windows-Benutzer

Überspringen Sie dies, wenn Sie ein Linux-Typ sind, aber trotz der Frage, die Ubuntu erwähnt, gilt meine Antwort auch perfekt für Windows Emacs. Nur in Bezug auf:

  • Schritt 2) Sie extrahieren polymode.zip in:

    %USERPROFILE%\conf\emacs

    Wie Sie vermuten, enthält die Umgebungsvariable% USERPROFILE% den Pfad zu Ihrem Benutzerprofilverzeichnis. Wenn Sie sich nicht sicher sind, was es ist, führen Sie es set USERPROFILEin der CLI-Eingabeaufforderung aus.
    Als Windows-Benutzer können Sie zum Speichern von Dingen verwendet werden My Documents. In diesem Fall lautet Ihr Verzeichnis:

    %USERPROFILE%\Documents\conf\emacs
  • Schritt 3) Wenn Sie in Schritt 2) den Pfad verwendet haben %USERPROFILE%\Documents\conf\emacs, ändern Sie die erste Codezeile entsprechend von:

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

    zu (beachten Sie die Schrägstriche):

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

    In beiden Fällen (mit und ohne "Eigene Dateien") bevorzugen Sie möglicherweise den Windows-Stil:

    (setq MY-EMACS (substitute-in-file-name "$USERPROFILE/Documents/conf/emacs")) 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.