Knitr Markdown resaltado en Emacs?

111

¿Existe alguna modificación de una herramienta existente o nueva herramienta que resaltará la sintaxis (color) bloques de código R en un documento de rebajas de punto cuando se abra en Emacs?

Los trozos de knitr que estoy viendo son bloques de triple tilde [```]que contienen código R en su interior.

EDITAR: cosas que probé hasta ahora:

- Ubuntu 12.04 con Emacs 23

emacs --version
GNU Emacs 23.3.1

1. Polymode

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

Estoy tratando de obtener polymode para resaltar la sintaxis de mis archivos Rmd, pero se queja de un archivo de carga de 'color':

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

En mi archivo .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-buffer:

Cannot open load file: color

- CentOS con Emacs 24:

emacs --version
GNU Emacs 24.2.1

1. Polymode instalado correctamente

Abra un archivo Rmd M-x polymode-minor-mode, sin cambios en el resaltado de sintaxis.


emacs --version
GNU Emacs 24.3.1

1. Polymode instalado correctamente

Abra un archivo Rmd M-x poly-markdown+r-mode, algo del resaltado de sintaxis comienza a aparecer, pero necesito modificar manualmente la prueba en cada bloque de código de tres marcas para que muestre completamente la sintaxis.

Ingrese la descripción de la imagen aquí

Ingrese la descripción de la imagen aquí

La segunda imagen es justo después de escribir un retorno antes del bloque knitr.

719016
fuente
10
Me encantaría saber las respuestas. Hay rumores persistentes de que los chicos de ESS llegarán a esto, pero aún no lo he visto ...
Ben Bolker
3
Tengo algo en casa que básicamente funciona. Se basa en el modo mumamo y el modo markdown. Sin embargo, tuve que hacer un par de cambios en el modo mumamo para que funcionara, como se explica aquí: bugs.launchpad.net/nxhtml/+bug/626039/comments/5 . Seguiré aquí con una respuesta después de llegar a casa y recordaré lo que hice.
Erik Iverson
4
¿Qué pasa con Vitalie ? polymode: github.com/vitoshka/polymode
daroczig
3
@daroczig - Interesante. Alguna idea de lo que él quiere decir con "Sin backends de programación alfabetizados", en la Advertencia de README ! ¿sección?
Josh O'Brien
4
@ JoshO'Brien Sobre el anuncio de ess-help de Vitalie, aclara lo que quiso decir: "Rnw es solo un polimodo. Lo que quiero decir con backend de programación alfabetizada es una herramienta que puede procesar / convertir el archivo en otra cosa. Como knitr u org- Engancharé estos días ess-swv-weave y ess-swv-PDF en mapas polimodos relacionados con R. Eso debería estar bastante bien por el momento, ya que knitr es lo suficientemente inteligente como para reconocer las cosas con las que está tratando ".
Erik Iverson

Respuestas:

3

Esto podría ayudar: http://sjp.co.nz/posts/emacs-ess-knitr/

Markdown de Knitr en Emacs a través de ESS

priyolahiri
fuente
Lo siento, pero esta referencia es incorrecta. Actualmente, Emacs-ESS no tiene resaltado para documentos Rmd o incluso una simple rebaja (y, por cierto, su artículo vinculado no lo afirma). En cuanto al primero, necesita polymode y para el último markdown.el. Además, si todo lo que quieres es simplemente cambiar el motor ESS de Sweave a knitr (¡sin resaltar!), No es necesario que pases por todas las complicaciones de este artículo, solo agrega(setq ess-swv-processor 'knitr) su archivo de inicio.
antonio
2

Tu problema

En primer lugar, dice que tiene GNU Emacs 23.3.1, pero en polymode readme.md, dice:

Probado con Emacs 24.3.1 y 24.4.5.

En cuanto a su error: "No se puede abrir el archivo de carga: color", en polymode.el, está la línea:

(require 'color)

este paquete está en Emacs 24, pero bien podría faltar en su versión.

Solución

  1. Actualice a una versión reciente (por lo tanto compatible) de Emacs.

  2. Extraiga el polymode.zip en un directorio donde guarde el material de Emacs, por ejemplo:

    ~\conf\emacs

y cambiar el resultado polymode-master directorio apolymode

  1. Agregue esto en su archivo de inicio (y si usó diferentes nombres arriba, cambie los nombres a continuación en consecuencia):

    ;; 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+ rmdcuando el archivo Rmd está abierto o establezca el modo en<!-- Local Variables: -->
    ... disfrute de un cambio dramático en su productividad.

PD
: No pase por alto la última línea elisp. Permitirá guardar las rebajas correctamente. De lo contrario, cuando vuelva a abrir su documento, tendrá sorpresas desagradables.

Una nota para los usuarios de Windows

Omita esto si le gusta Linux, pero, a pesar de que la pregunta menciona Ubuntu, mi respuesta también se aplica perfectamente a Windows Emacs. Solo con respecto a:

  • Paso 2) Extraerás polymode.zip en:

    %USERPROFILE%\conf\emacs

    Como puede imaginar, la variable de entorno% USERPROFILE% contiene la ruta al directorio de su perfil de usuario. Si no está seguro de qué es, ejecútelo set USERPROFILEen el indicador de CLI.
    Como usuario de Windows, es posible que esté acostumbrado a almacenar cosas My Documents. En ese caso, su directorio será:

    %USERPROFILE%\Documents\conf\emacs
  • Paso 3) Si en el Paso 2) usó la ruta %USERPROFILE%\Documents\conf\emacs, cambie en consecuencia la primera línea de código de:

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

    a (observe las barras):

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

    En ambos casos (con y sin "Mis documentos"), es posible que prefiera el estilo más de Windows:

    (setq MY-EMACS (substitute-in-file-name "$USERPROFILE/Documents/conf/emacs")) 
antonio
fuente