2012-02-19 28 views
15

Có chế độ nhỏ Emacs (hay đoạn mã elisp) cho phép bạn ẩn/hiển thị có chọn lọc môi trường trong khi ở Sweave (Sweave = R + LaTeX) không?EMACS gấp/mở ra mã R

Ví dụ: tôi muốn di chuyển đến đầu khối mã (< < >>), nhấn phím tắt và có nội dung của môi trường bị ẩn khỏi chế độ xem.

Điều này có khả thi không? Tôi vừa thử chế độ hs-minor-mode, allout-mode và outline-minor, nhưng hầu hết chúng không nhận ra môi trường R.

Tôi cũng thử chế độ org hoạt động tốt để gấp/mở ra nhưng không hỗ trợ mã đánh dấu LaTeX cho biểu thức như: \ cite {}; \ ref {}; \ Ce {} ...

nhất Riccardo

--EDIT--

tôi đã cố gắng để một ngày nào đó để sử dụng emacs-gấp-mode nhưng, bởi vì tôi làm việc trên một rất dài mã (hơn 2000 hàng), chế độ xếp "bị điên" và ví dụ hiểu sai việc khai thác một số ký tự đặc biệt (ví dụ $), có cách sử dụng rất khác cả trong R so với LaTeX. Tôi nghĩ rằng vấn đề là nội tại để Sweave, bởi vì trong cùng một bộ đệm tôi có mã R và mã LaTeX với nhau.

Vì vậy, bây giờ tôi đang thử nghiệm các emacs phác thảo chế độ nhỏ. Nhưng khi tôi chuyển qua R từ LaTeX (và ngược lại), tất cả phần được phác thảo được mở ra mặc dù tôi viết trong .emacs của tôi:

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

Bạn có bất cứ đề xuất nào không ??

Trân

--edit 2--

Có vẻ như để làm việc:

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

Tôi không biết nếu là đúng đó, khi bạn rời khỏi đoạn, nó là tự động mở ra.

+1

đó là việc thực hiện Chế độ Rnw mang đến cho bạn sự cố. Tôi cũng đã thử hideshow. Nhưng vì Rnw đặt lại chế độ trong các khối bạn rời/nhập, mọi thứ sẽ được đặt lại. Có một số cuộc đàm phán trong ESS để viết lại Rnw, dựa trên [noweb.el] tốt hơn (http://www.loveshack.ukfsn.org/emacs/noweb.el). – VitoshKa

+0

Xin chào, tôi đã giải quyết được vấn đề bằng cách sử dụng chế độ gấp. Tôi đã chỉnh sửa lại bài đăng bằng giải pháp của tôi. – Riccardo

Trả lời

1

Có một gấp chế độ chung ở đây: http://www.emacswiki.org/emacs/FoldingMode

+0

"Một số sự cố" bạn đang gặp phải là gì? – snim2

+0

Xin chào, tôi đã thử chế độ gấp emacs và tôi gặp rắc rối. Tôi thêm vào của tôi .emacs này: '(tải" gấp "'nomessage' noerror) (gấp-mode-add-find-file-móc) (gấp-thêm-to-marks-list 'Rnw-mode" # {{{"" #}}} "nil t)' nhưng khi tôi mở một tập tin emxs .Rnw không phát hiện dấu gấp; hơn nữa, nếu tôi gấp một khu vực (C-c @ C-x), emacs sử dụng ký tự gấp của LaTeX thay vì "# {{{#}}}". Bất kì lời đề nghị nào?? – Riccardo

+0

Nếu vấn đề là các nếp gấp không sử dụng cú pháp nhận xét của ngôn ngữ bạn đang sử dụng, hãy thử làm theo hướng dẫn cho Ruby, PHP và Prolog có tại đây: http://www.emacswiki.org/emacs/FoldingMode# toc4 và chỉ sửa đổi cho R. – snim2

0

tôi đã có kết quả rất tốt với hideshowhs-minor-mode, đây là những dòng tôi về cơ bản sử dụng trong tôi ~/.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)))