Спочатку вам потрібно буде вивчити основний текст, що працює з 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
дуже корисна в цих ситуаціях.