2013-09-30 4 views
1

Недавно я обновился от версии 2.15 и более старой версии ESS с помощью установщика Windows 7 от Vincent Goulet по адресу http://vgoulet.act.ulaval.ca/en/emacs/. Это включает в себя версию ESS 13.09. Я также только что установил R версии 3.0.2.ess-execute привязка ключа не работает с новой версией ESS

Мой старый рабочий процесс состоял в использовании C-c C-t (привязка по умолчанию) для запуска команд через ess-execute и отправки результатов во временный буфер. Я нашел это невероятно полезным для моего рабочего процесса и стиля программирования R.

Однако с новой версией эта привязка ключа была удалена. Я искал вокруг и не мог найти другие темы, касающиеся этой темы. Я заглянул в ess-mode.el и нашел эту строку:

;; (define-key map "\C-c\C-t" 'ess-execute-in-tb) 

Что закомментировано. Я вижу, что они добавили приятную функцию ess-describe-object-at-point, но это не позволяет выполнять команды.

Я не emacs power-user, поэтому я стараюсь скопировать фрагменты lisp в мои .emacs и делать небольшие изменения для них. Я попытался (1) раскомментировать строку выше и (2) определить новый keybinding в моем файле .emacs в том же месте, что и новые привязки клавиш в ESSShift Enter (http://www.emacswiki.org/emacs/ESSShiftEnter).

(add-hook 'ess-mode-hook 
    (lambda() 
    (local-set-key [(shift return)] 'my-ess-eval) 
    ;; added Ctrl-Enter to stay on same line 
    (local-set-key [C-return] 'ess-eval-line) 
    ;; Newest version of ESS got rid of C-c C-t for ess-execute add back 
    (local-set-key "\C-c\C-t" 'ess-execute-in-tb)) 

Однако ни один из этих методов не работал.

Мои вопросы: есть ли причина, по которой этот ключ был отключен в новой версии? То есть следует ли использовать другую функцию, которая заменила его? Если нет, то как лучше всего включить эту привязку клавиш?

ответ

1

Ключи ESS были реконструированы примерно год назад. C-c C-t теперь привязан к dev-map, который предоставляет кучу полезных функций, которые вы, возможно, захотите использовать в будущем, . Поэтому лучше не отключать его. Ваш код должен работать. Вероятно, вы использовали C-c C-t из буфера *R*, но этот номер inferior-ess-mode, а не ess-mode.

Вы лучше определяете свои ключи в ess-exta-map, таким образом, он будет работать как в режиме ess-mode, так и в нижнем-ess-режиме. Что-то вроде этого:

(eval-after-load "ess-mode" 
    '(progn 
    (define-key ess-extra-map "\C-e" 'ess-execute-in-tb))) 

Боль с eval-after-load необходима, потому что нагрузки распределения Винсента ESS после загрузки файла пользователь инициализации. Если вы загрузите свой ESS (load "ess-site"), вы можете просто оставить (define-key ...) в вашем .emacs.el.

C-c C-e должен выполнить вашу команду.

Я добавляю этот точный ключ в версию разработки ESS. Итак, в следующей версии вы можете удалить вышеуказанный код. Спасибо, что всплыли.

К сожалению, C-RET связан с ess-eval-region-or-line-and-step. Вы можете подумать о том, чтобы так держать.

+0

Спасибо за этот ответ, я попробовал ваш код и действительно работал. Я сделал ошибку раньше, поэтому мой код не работал. Мне очень нравится функциональность ess-execute, но одна вещь, которую я заметил с новой версией, заключается в том, что завершение не работает. То есть если я делаю M-x ess-execute, тогда введите st и , где говорится: «Нет процесса ESS, связанного с этим буфером» - есть ли простой способ вернуть эту функциональность? Спасибо за работу над всеми улучшениями, я не могу представить кодирование без ESS на этом этапе! –

+0

@ColeMonnahan Спасибо, что указали это. Я только что исправил его в ESS. – VitoshKa

Смежные вопросы