2011-12-05 19 views
9

Khi sử dụng R khối mã trong tài liệu .Rnw, bộ đệm emacs tự động phát hiện con trỏ nằm trong đoạn mã (ví dụ: <<>>@), và chuyển sang chế độ ESS - điều này rất có giá trị vì người ta có thể nhận ESS dựa trên mã-định dạng trong đoạn mã, và nhiều hơn nữa, một cách hữu ích, người ta có thể gửi các dòng mã/vùng để kém hơn *R* quá trình đệm.Emacs, R, Org-mode: cách bật tự động chuyển sang chế độ ESS trong các khối mã R?

Làm cách nào để có cùng chức năng trong tệp chế độ org trong các khối R (ví dụ: #+begin_src R#+end_src) - Tôi muốn các emacs tự động nhận ra nó nằm trong khối mã R và bật ESS -mode để tôi có thể gửi đoạn mã tới quy trình *R*. Tôi biết rằng tôi có thể thực hiện Ctl-C ' và chuyển sang bộ đệm chế độ ESS khác nơi tôi có thể chỉnh sửa mã và nhận tất cả các tiện ích chế độ ESS khác (bao gồm gửi mã tới R). Tuy nhiên, tôi muốn không phải phải làm điều này, tức là tôi muốn có thể gửi đoạn mã từ khối mã R trong cùng một bộ đệm chế độ org.

+0

Có [mmm-mode] (http://www.emacswiki.org/emacs/MmmMode) - có thể có thể giúp bạn. Tôi không bao giờ sử dụng nó bản thân mình. – Adobe

Trả lời

4

Một năm trước, tôi hỏi số same question trên danh sách chế độ tổ chức. @ cm2 đã đề cập, rằng không thể sử dụng chức năng ESS trong chế độ org; theo như tôi biết Emacs không thể xử lý hai chế độ chính và ngay cả với chế độ mmm có vẻ là một số khó khăn.

Dan Davison vui lòng đăng một số mã elisp bắt chước một số tính năng ESS. Vì vậy, bạn có thể muốn kiểm tra câu trả lời của Dan cho câu hỏi của tôi.

+0

Cảm ơn bạn @Bernd. Chủ đề email bạn đề cập dường như giải quyết hầu hết các chức năng tôi cần.Tôi phải điều tra cách kích hoạt "shift-enter" để gửi mã từ khối mã R sang tiến trình R. Sau đó, tôi sẽ được tất cả các thiết lập. Tôi đang chọn của bạn như là câu trả lời được chấp nhận, vì nó chỉ vào một chuỗi email thực tế với một giải pháp gần như hoàn chỉnh. –

4

AFAIK, điều này không thể thực hiện được với việc triển khai chế độ Org hiện tại.

Tôi không chắc chắn điều này có thể thực hiện được ở tất cả trong chế độ Org mà không cần đào sâu vào mã elisp. Điểm chính của lệnh C-c ' trong chế độ Org là để bạn có thêm bộ đệm có tất cả cú pháp tô sáng mà bạn muốn/cần cho ngôn ngữ cụ thể của bạn. Có lẽ có một cách để hack xung quanh mã này cho R -specific code bằng cách viết một số móc chế độ Org kiểm tra đầu tiên để xem bạn có đang ở trong một khối #+begin_src R ... #+end_src R và sau đó kiểm tra đoạn mã. Tôi nghi ngờ điều này sẽ lộn xộn và xung đột với các tính năng khác của chế độ Org. Ngoài ra, bạn sẽ phải viết một hàm khác để lấy khối mã hiện tại và chuyển nó tới trình thông dịch R của Org-mode, cùng với tất cả các tùy chọn bạn đã thêm vào khối src.

+0

Cảm ơn bạn đã trả lời, chấp nhận bạn là câu trả lời hay nhất. Thật tốt khi biết rằng không có giải pháp nào ngoài đó mà tôi đang thiếu. Và bây giờ tôi sẽ từ bỏ nó, và bao gồm 'Ctl-C '' trong luồng công việc của tôi. –

0

Gói poly-org.el trong gói polymode được thiết kế để xử lý nhiều chế độ chỉnh sửa trong chế độ org. Tôi đã thử, nhưng nó đóng băng Emacs do không cho phép jit-lock trong bộ đệm gián tiếp.

0

Cách giải quyết khác là chuyển đổi thủ công giữa các chế độ khi cần, ví dụ, thêm mã sau vào .emac và sử dụng F6.

;; Toggle between org & R modes. 
(defun toggle-org-R-mode() 
    (interactive) 
    "Toggle mode between org-R modes" 
    (cond 
    ((string= major-mode "org-mode") 
    (R-mode)) 
    ((string= major-mode "ess-mode") 
    (org-mode)) 
    ) 
) 
(global-set-key [f6] 'toggle-org-R-mode) 
Các vấn đề liên quan