Knitr Markdown destacando no Emacs?

111

Existe alguma modificação de uma ferramenta existente ou nova ferramenta que irá realçar a sintaxe (cor) dos blocos do código R em um documento de marcação do knitr quando aberto no Emacs?

Os pedaços de knitr que estou olhando são blocos de backtick triplo [```]que contêm código R dentro.

EDIT: coisas que tentei até agora:

- Ubuntu 12.04 com Emacs 23

emacs --version
GNU Emacs 23.3.1

1. Polimodo

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

Estou tentando obter o polymode para realçar a sintaxe dos meus arquivos Rmd, mas ele está reclamando de um arquivo de carregamento de 'cor':

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

No meu arquivo .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 com Emacs 24:

emacs --version
GNU Emacs 24.2.1

1. Polymode instalado corretamente

Abra um arquivo Rmd,, M-x polymode-minor-modenenhuma alteração no realce de sintaxe.


emacs --version
GNU Emacs 24.3.1

1. Polymode instalado corretamente

Abra um arquivo Rmd M-x poly-markdown+r-mode, alguns dos realces de sintaxe começam a aparecer, mas preciso modificar manualmente o teste em cada bloco de código de triple-tick para que ele mostre totalmente a sintaxe.

Insira a descrição da imagem aqui

Insira a descrição da imagem aqui

A segunda imagem é logo após digitar um Return antes do bloco knitr.

719016
fonte
10
eu adoraria saber as respostas. Existem rumores persistentes de que os caras da ESS vão chegar a isso, mas eu não vi ainda ...
Ben Bolker
3
Tenho algo em casa que basicamente funciona. É baseado no modo mumamo e no modo markdown. Tive de fazer algumas alterações no mumamo-mode para fazê-lo funcionar, explicado aqui: bugs.launchpad.net/nxhtml/+bug/626039/comments/5 . Seguirei aqui com uma resposta depois de chegar em casa e lembrar o que fiz.
Erik Iverson
4
E o Vitalie's polymode: github.com/vitoshka/polymode
daroczig
3
@daroczig - Interessante. Qualquer ideia do que ele quer dizer com "Não há back-ends de programação alfabetizados", no README's Warning! seção?
Josh O'Brien
4
@JoshO'Brien No anúncio ess-help de Vitalie, ele esclarece o que quis dizer: "Rnw é apenas um polimodo. O que quero dizer com backend de programação letrado é uma ferramenta que pode processar / converter o arquivo em outra coisa. Como knitr ou org- modo. Vou ligar estes dias ess-swv-weave e ess-swv-PDF em mapas de polimodo relacionados com R. Isso deve estar bem por enquanto, pois o knitr é inteligente o suficiente para reconhecer as coisas com as quais está lidando. "
Erik Iverson

Respostas:

3

Isso pode ajudar: http://sjp.co.nz/posts/emacs-ess-knitr/

Knitr markdown no Emacs através do ESS

Priyolahiri
fonte
Desculpe, mas esta referência está errada. Atualmente o Emacs-ESS não tem realce para documentos Rmd ou mesmo marcação simples (e a propósito, seu artigo vinculado não afirma isso). Quanto ao primeiro, você precisa de polymode e, para o último, markdown.el. Além disso, se tudo o que você deseja é apenas mudar o mecanismo ESS de Sweave para knitr (sem realçar!), Não há necessidade de passar por todas as complicações deste artigo, basta adicionar (setq ess-swv-processor 'knitr)seu arquivo init.
antonio
2

Seu problema

Em primeiro lugar, você diz que tem GNU Emacs 23.3.1, mas em polymode readme.md, lê-se:

Testado com Emacs 24.3.1 e 24.4.5.

Quanto ao seu erro: "Não é possível abrir o arquivo de carregamento: cor", em polymode.el, existe a linha:

(require 'color)

este pacote está no Emacs 24, mas pode muito bem faltar na sua versão.

Solução

  1. Atualize para uma versão recente (portanto com suporte) do Emacs.

  2. Extraia o polymode.zip em um diretório onde você guarda o material Emacs, por exemplo:

    ~\conf\emacs

e mude o polymode-masterdir resultante parapolymode

  1. Adicione isso ao seu arquivo init (e se você usou nomes diferentes acima, altere os nomes abaixo de acordo):

    ;; 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 o arquivo Rmd é aberto ou defina o modo em <!-- Local Variables: -->
    ... desfrute de uma mudança dramática em sua produtividade.

PS
Não negligencie a última linha elisp. Isso permitirá salvar o markdown corretamente. Caso contrário, ao reabrir seu documento, você terá surpresas desagradáveis.

Uma nota para usuários do Windows

Pule isso se você for um cara do Linux, mas, apesar da pergunta mencionar Ubuntu, minha resposta se aplica perfeitamente ao Windows Emacs também. Apenas com relação a:

  • Etapa 2) Você irá extrair polymode.zip em:

    %USERPROFILE%\conf\emacs

    Como você imagina, a variável de ambiente% USERPROFILE% contém o caminho para o diretório de seu perfil de usuário. Se você não tiver certeza do que é, execute set USERPROFILEno prompt CLI.
    Como um usuário do Windows, você pode estar acostumado a armazenar coisas no My Documents. Nesse caso, o seu dir será:

    %USERPROFILE%\Documents\conf\emacs
  • Etapa 3) Se na Etapa 2) você usou o caminho %USERPROFILE%\Documents\conf\emacs, altere de acordo a primeira linha de código de:

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

    para (observe as barras):

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

    Em ambos os casos (com e sem "Meus documentos"), você pode preferir o estilo mais Windows:

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