2012-02-19 11 views
15

C'è una modalità secondaria Emacs (o pezzo di codice elisp) che consente di nascondere/mostrare selettivamente gli ambienti mentre si trova in Sweave (Sweave = R + LaTeX)?EMACS pieghevole/dispiegato codice R

Per esempio, vorrei spostarmi all'inizio di un blocco di codice (< < >>), premere un tasto e tenere nascosto il contenuto dell'ambiente.

È possibile? Ho appena provato hs-minor-mode, allout-mode e outline-minor-mode, ma la maggior parte di essi non riconosce gli ambienti R.

Ho anche provato l'org-mode che funziona perfettamente per piegare/aprire ma, non supportano il codice di evidenziazione LaTeX per espressioni come: \ cite {}; \ Ref {}; \ Ce {} ...

Miglior Riccardo

--EDIT--

ho provato per qualche giorno per usare emacs-pieghevole-mode, ma, perché io lavoro in un tempo molto lungo codice (più di 2000 righe), la modalità di piegatura "impazzisce" e per esempio fraintende il mining di qualche carattere speciale (es. $), che ha un uso molto diverso sia in R che in LaTeX. Penso che il problema sia intrinseco a Sweave, perché nello stesso buffer ho il codice R e il codice LaTeX insieme.

Così, ora sto testando emacs outline mode minore. Ma quando mi muovo attraverso R da LaTeX (e viceversa) tutta la parte delineato erano dispiegato nonostante io scrivere nel mio .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") 

Hai qualche suggerimento ??

saluti

--edit 2--

Sembra funzionare:

(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 "#{{{ " "#}}}" " ") 

Non so se è giusto che, quando si lascia il pezzo, è automaticamente spiegato.

+1

E 'la realizzazione di Modalità Rnw che ti dà il problema. Ho anche provato l'hideshow. Ma poiché Rnw reimposta la modalità nei blocchi che lasci/inserisci, tutto viene ripristinato. Ci sono alcuni discorsi in ESS per riscrivere il Rnw, basato su un migliore [noweb.el] (http://www.loveshack.ukfsn.org/emacs/noweb.el). – VitoshKa

+0

Ciao, ho parzialmente risolto il problema utilizzando la modalità di piegatura. Ho ri-modificato il post con la mia soluzione. – Riccardo

risposta

1

C'è una modalità pieghevole generica qui: http://www.emacswiki.org/emacs/FoldingMode

+0

Qual è il "problema" che stai riscontrando? – snim2

+0

Ciao, ho provato la modalità di piegatura emacs e ho qualche problema. Aggiungo al mio .emacs questo: '(carica" ​​folding "'nomessage' noerror) (folding-mode-add-find-file-file-hook) (folding-add-to-marks-list 'Rnw-mode" # {{{"" #}}} "nil t)" ma quando apro un file .Rnw emacs non rileva i segni di piegatura; inoltre, se piego una regione (C-c @ C-x), emacs usa il carattere pieghevole di LaTeX invece di "# {{{#}}}". Qualche suggerimento?? – Riccardo

+0

Se il problema è che le pieghe non utilizzano la sintassi dei commenti della lingua che stai usando, prova a seguire le istruzioni per Ruby, PHP e Prolog che sono qui: http://www.emacswiki.org/emacs/FoldingMode# toc4 e basta modificare per R. – snim2

0

ho avuto ottimi risultati con il NascondiMostrahs-minor-mode, queste sono le linee Io fondamentalmente uso nel mio ~/.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)))