2012-02-19 16 views
15

¿Hay un modo menor de Emacs (o una porción de código elisp) que le permite ocultar/mostrar ambientes selectivamente mientras está en Sweave (Sweave = R + LaTeX)?EMACS plegable/desplegable código R

Por ejemplo, me gustaría pasar al principio de un bloque de código (< < >>), presionar una tecla y tener el contenido del entorno oculto a la vista.

¿Esto es posible? Acabo de probar hs-minor-mode, allout-mode y outline-minor-mode, pero la mayoría de ellos no reconocen los entornos R.

También probé org-mode que funciona muy bien para doblar/desplegar, pero no admite el código de resaltado LaTeX para expresiones como: \ cite {}; \árbitro{}; \ {} Ce ...

Mejor Riccardo

--EDIT--

He intentado durante algunos días de usar emacs-plegado en modo pero, porque trabajo en un tiempo muy largo código (más de 2000 filas), el modo de plegado "se vuelve loco" y, por ejemplo, malinterpreta la extracción de algún carácter especial (es decir, $), que tiene un uso muy diferente tanto en R como en LaTeX. Creo que el problema es intrínseco a Sweave, porque en el mismo buffer tengo el código R y el código LaTeX juntos.

Por lo tanto, ahora estoy probando emacs esquema modo menor. Pero cuando me muevo a través de I a partir de látex (y viceversa) toda la parte esbozado fueron desplegadas a pesar de que escribir en mi .emacs:

(defun turn-on-outline-minor-mode() 
(outline-minor-mode 1)) 
    (add-hook 'ess-mode-hook 'turn-on-outline-minor-mode) 
    (add-hook 'LaTeX-mode-hook 'turn-on-outline-minor-mode) 
    (add-hook 'latex-mode-hook 'turn-on-outline-minor-mode) 
(setq outline-minor-mode-prefix "\C-c\C-o") 

¿Tiene alguna sugerencia ??

Saludos

--edit 2--

Parece que funciona:

(load "folding" 'nomessage 'noerror) 
(folding-mode-add-find-file-hook) 
(add-hook 'LaTeX-mode-hook 'folding-mode) 
(add-hook 'ess-mode-hook 'folding-mode) 
(folding-add-to-marks-list 'ess-mode "#{{{ " "#}}}" " ") 

No sé si es correcto que, cuando salga de la porción, es automáticamente desplegado.

+1

Es la puesta en práctica de Modo Rnw que te da el problema También probé hideshow. Pero como Rnw restablece el modo en los fragmentos que dejas/ingresas, todo se restablece. Hay algunas charlas en ESS para reescribir el Rnw, basado en un mejor [noweb.el] (http://www.loveshack.ukfsn.org/emacs/noweb.el). – VitoshKa

+0

Hola, solucioné parcialmente el problema usando el modo de plegado. He vuelto a editar la publicación con mi solución. – Riccardo

Respuesta

1

Hay un modo de plegado genérica aquí: http://www.emacswiki.org/emacs/FoldingMode

+0

¿Cuál es el "problema" que está teniendo? – snim2

+0

Hola, probé el modo plegable de emacs y tengo algunos problemas. Agrego a mis .emacs esto: '(cargar" doblar "'nomessage' noerror) (folding-mode-add-find-file-hook) (folding-add-to-marks-list 'Rnw-mode" # {{{"" #}}} "nil t)' pero cuando abro un archivo .Rnw los emacs no detectan las marcas de plegado; además, si doblo una región (C-c @ C-x), emacs usa el carácter plegable de LaTeX en lugar de "# {{{#}}}". ¿¿Cualquier sugerencia?? – Riccardo

+0

Si el problema es que los pliegues no utilizan la sintaxis de comentario del idioma que está utilizando, intente seguir las instrucciones para Ruby, PHP y Prolog que se encuentran aquí: http://www.emacswiki.org/emacs/FoldingMode# toc4 y simplemente modificar para R. – snim2

0

que he tenido muy buenos resultados con el OcultarMostrarhs-minor-mode, estas son las líneas que básicamente uso en mi ~/.emacs.d/init.el:

(add-hook 'ess-mode-hook 'hs-minor-mode) 

(eval-after-load 'hideshow 
'(progn 
    (global-set-key (kbd "C-+") 'hs-toggle-hiding))) 
Cuestiones relacionadas