Сначала вам нужно изучить базовый текст, работающий с emacs. Поскольку emacs очень сложен, выяснить, как просто выбрать текст и скопировать текст, может быть непросто. Поэтому потратьте некоторое время на выяснение того, как это сделать эффективно. Чтение руководства может помочь. Для Mac OS X используется Aquamacs, он поддерживает собственные сочетания клавиш.
Работа с ESS не отличается от работы с R. Должны применяться те же правила организации кода. В моем случае у каждого проекта есть свой собственный каталог, который находится в родительском каталоге с именем R, который находится в моем домашнем каталоге (для Windows я рекомендую указать домашний каталог emacs в каталоге, где находится весь ваш исходный код). Поэтому, когда я использую ESS для работы над проектом, я всегда делаю это M-x R
и выбираю начальный каталог, мой каталог проекта.
После запуска процесса R я обычно делю emacs на два окна (терминология emacs). Затем слева у меня есть исходный код, который я отправляю процессу R справа. Соответствующие ярлыки (это ярлыки emacs) предназначены C-x 3
для разделения окон по вертикали, C-x 1
для создания текущего буфера единственным окном и C-x 2
для разделения окон по горизонтали.
При отправке кода на R я различаю функции и операторы R. Я делаю это, сохраняя все свои функции в одном файле, который обычно называется 10code.R
. Затем я могу просто загрузить этот файл, используя опцию загрузки файла ESS (ярлык C-c C-l
). Преимущество этого подхода состоит в том, что он получает все функции и ничего не производит в буфере R. Если в вашем коде есть ошибка, ESS покажет сообщение в минибуфере, и вы можете исследовать его, нажав C-c
`.
Другой код - это R-операторы, которые я пытаюсь сделать самоочевидными: загружать данные, очищать данные, подбирать статистическую модель, проверять результаты, создавать окончательные результаты. Исходный код для этих утверждений является текущим статусом проекта. Предполагается, что после того, как проект будет завершен, источник файлов с этим кодом воспроизведет проект (я также использую git для отслеживания истории). При работе с этим файлом я обычно работаю только с одним оператором R, который отправляю процессу R с помощью функции eval, параграфа, команды оператора, которой является ярлык C-c C-c
. Эта команда отправляет R обработать абзац, т.е. текст, который разделен новыми строками. Это удобно, поскольку вы можете сгруппировать операторы R в задачи и отправить всю задачу в процесс R. Это также не требует выбора текста, что тоже очень удобно. ЯрлыкC-c C-c
имеет преимущество в том, что он перемещает курсор в окно R, поэтому вы сразу можете проверить результаты отправленного оператора R.
Так что мой основной рабочий процесс много перемещается между окнами и буферами. Чтобы облегчить это, я использую следующие ярлыки в моем файле .emacs:
(define-key global-map [f1] 'Control-X-prefix)
(define-key global-map [f3] 'find-file)
(define-key global-map [f2] 'save-buffer)
(define-key global-map [f8] 'kill-buffer)
(define-key global-map [f5] 'switch-to-buffer)
(define-key global-map [f6] 'other-window)
(define-key global-map [f9] 'ess-load-file)
Я редко пользуюсь f1
, но все остальные очень часто. Другие конкретные настройки ESS, которые я использую, следующие:
(setq comint-input-ring-size 1000)
(setq ess-indent-level 4)
(setq ess-arg-function-offset 4)
(setq ess-else-offset 4)
Это говорит ESS сделать ширину вкладки 4 символа (по умолчанию 2), что является моим личным предпочтением, и увеличивает количество введенных вами команд, которые ESS сохраняет как историю.
Для работы с процессом R непосредственно я нашел очень полезными следующие ярлыки:
(add-hook 'inferior-ess-mode-hook
'(lambda nil
(define-key inferior-ess-mode-map [\C-up] 'comint-previous-matching-input-from-input)
(define-key inferior-ess-mode-map [\C-down] 'comint-next-matching-input-from-input)
(define-key inferior-ess-mode-map [\C-x \t] 'comint-dynamic-complete-filename)
)
)
Это напоминает оператор R из вашей истории операторов R, но он пытается сопоставить его с тем, который уже есть в вашей строке. Так, например, ввод pl
R-процесса и нажатие \C-up
(это управление и стрелка вверх) будут циклически проходить через все операторы, которые начинаются с pl
, поэтому будут вызываться, например, все plot(...
команды.
Последняя настройка, которую я использую с ESS, следующая:
(setq ess-ask-about-transfile t)
Таким образом, ESS всегда спрашивает, где сохранить текст в буфере с помощью процесса R. Я обычно нумерую эти файлы по дате, поэтому у меня всегда есть другой способ отследить, что именно я делал. Единственное предостережение об этой опции заключается в том, что по какой-то причине ESS устанавливает буфер R только для чтения после загрузки R. Ярлык для создания буфера для записи - C-x C-q
.
Так что это мои настройки, которые я использую для работы с ESS, я доволен ими и уже несколько лет не чувствую необходимости что-либо добавлять. Представляя ESS начинающим пользователям, я обычно даю этот обзор.
Я закончу последний ярлык, который для меня является наиболее используемым ярлыком при работе с Emacs и, в частности, с ESS, C-g
который завершает команду в мини-буфере. На протяжении всех лет, когда я работаю с Emacs и ESS, мне все еще удается вызывать некоторые команды Emacs, которые мне не нужны, которые C-g
очень помогают в таких ситуациях.