2011-12-05 12 views
9

.Rnw 문서에 코드 덩어리를 사용하는 경우 emacs 버퍼는 커서가 코드 덩어리 (예 : <<>>@)에 있음을 자동으로 감지하고 ESS 모드로 전환합니다. 이는 ESS 코드 기반의 코드 포맷을 코드 덩어리 내에서 처리 할 수 ​​있으며 더 유용하게 코드 라인/영역을 하위 *R* 프로세스 버퍼로 보낼 수 있습니다. 내가 (즉, #+begin_src R#+end_src 사이) R 코드 블록 내에서 조직 모드 파일에 동일한 기능을 얻는 방법Emacs, R, Org-mode : R 코드 블록 내에서 ESS 모드로 자동 전환하는 법?

- 나는 이맥스는 자동으로이 R 코드 코드 블록 내에서의 인식과 ESS를 켜 싶습니다 -mode 코드의 스 니펫을 *R* 프로세스로 전송할 수 있습니다. Ctl-C '을 수행하고 다른 ESS 모드 버퍼로 전환하여 코드를 편집하고 다른 모든 ESS 모드의 편리 성 (코드 전송을 포함하여 R)을 얻을 수 있다는 것을 알고 있습니다. 그러나 이 아니라이 필요합니다. 즉, 동일한 org-mode 버퍼의 R 코드 블록에서 코드 스 니펫을 보낼 수 있기를 원합니다.

+0

[mmm-mode] (http://www.emacswiki.org/emacs/MmmMode)가 있습니다. 도움이 될 수 있습니다. 나는 그것을 사용하지 않았다. – Adobe

답변

4

1 년 전쯤에 나는 same question에 org-mode-list를 물었다. @ cm2는 org 모드에서 ESS 기능을 사용할 수 없다는 것을 이미 언급했습니다. 내가 아는 한 Emacs는 두 가지 주요 모드를 처리 할 수 ​​없으며 심지어 mmm 모드에서도 몇 가지 어려움이있는 것으로 보인다.

Dan Davison은 ESS 기능 중 일부를 모방 한 일부 elisp 코드를 친절하게 게시했습니다. 그래서, 내 질문에 댄의 대답을 확인하고 싶을 수도 있습니다.

+0

@Bernd 감사합니다. 언급 한 이메일 스레드는 필자가 필요로했던 대부분의 기능을 처리하는 것 같습니다.나는 "shift-enter"가 R 코드 블록에서 R 프로세스로 코드를 보내는 것을 가능하게하는 방법을 조사해야한다. 그럼 내가 다 준비 할거야. 나는 거의 완벽한 해결책을 가진 실제 이메일 스레드를 지적 했으므로 받아 들인 대답으로 선택하고있다. –

4

AFAIK이 작업은 현재 Org 모드의 구현에서는 수행 할 수 없습니다.

저는 이것이 조직 모드 내에서 elisp 코드를 탐색하지 않고는 전혀 수행 할 수 없다고 확신하지 않습니다. Org-mode에서 C-c ' 명령의 요점은 특정 언어에 대해 원하는/필요한 모든 구문 강조 표시를 가진 추가 버퍼를 갖기위한 것입니다.

아마 코드 청크를 확인 후, 당신은 #+begin_src R ... #+end_src R 블록에 있는지 먼저 확인 어떤 조직 모드 후크를 작성하고,에 의해 R - 특정 코드에 대해이 문제를 해킹하는 방법이있다. 나는 이것이 지저분하고 다른 Org-mode 기능과 충돌 할 것이라고 생각합니다. 또한 현재 코드 블록을 잡고 Org-mode의 R 인터프리터와 src 블록에 추가 한 모든 옵션과 함께 전달하는 또 다른 함수를 작성해야합니다.

+0

답장을 보내 주셔서 감사합니다. 내가 놓친 해결책이 없다는 것을 아는 것이 좋다. 그리고 지금 당장은 그것을 포기하고 제 작업 흐름에'Ctl-C ''를 포함시킵니다. –

0

polymode 패키지의 poly-org.el은 org-mode에서 다중 모드 편집을 처리하도록 설계되었습니다. 나는 시도했으나 간접 버퍼에서 jit-lock을 사용하지 않기 때문에 Emacs가 정지되었다.

0

해결 방법은 필요할 때 .emacs에 다음 코드를 추가하고 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)