Emacs ESS Mode - вкладка для области комментариев

Я использую режим Emacs-Speaks-Statistics (ESS) для Emacs. При редактировании кода R любые строки комментариев (начинающиеся с #) автоматически переходят в крайнее правое положение, когда я создаю новую строку над ними. Как мне изменить мой файл .emacs.el, чтобы это исправить?

Например, у меня есть:

# Comment

Теперь, поместив курсор в начало строки и нажав Enter, я получаю:

                                # Comment

Спасибо за любые подсказки.


person Christopher DuBois    schedule 23.04.2009    source источник


Ответы (4)


Используйте '###', если вы не хотите, чтобы комментарии были с отступом. Согласно руководству,

По умолчанию комментарии, начинающиеся с «###», выравниваются по началу строки. Комментарии, начинающиеся с «##», выравниваются по текущему уровню отступа для блока, содержащего комментарий. Наконец, комментарии, начинающиеся с '#', выравниваются по столбцу справа (40-й столбец по умолчанию, но это значение контролируется переменной comment-column) или сразу после выражения в строке, содержащей комментарий, если он расширяется. за пределами столбца отступа.

person huaiyuan    schedule 23.04.2009
comment
Я рад, что заглянул, прежде чем задавать точно такой же вопрос. Я отметил этот ответ, потому что думаю, что это действительно лучшее решение, чем ответ выше. Я давно думал, что это ошибка / проблема с режимом ESS, но после настройки синтаксиса все мои проблемы исчезли. - person Choens; 03.02.2012
comment
Это соглашение может показаться странным, если вы мало используете Emacs. Однако это соглашение происходит от lisp и emacs-lisp, где количество точек с запятой обозначает тип комментария и, следовательно, его отступ. - person Stephen Eglen; 15.08.2014

Либо

(setq ess-fancy-comments nil)

если вы никогда не хотите делать отступ одинарных # комментариев, или

(add-hook 'ess-mode-hook 
          (lambda () 
            (local-set-key (kbd "RET") 'newline)))

если вы хотите изменить поведение Enter, чтобы он не отступал.

person Jouni K. Seppänen    schedule 23.04.2009
comment
Скорее, я думаю, вы должны использовать # для комментариев в конце строки, и они намеренно имеют хороший отступ в один и тот же столбец - ›хороший листинг кода. Что касается других комментариев, действительно приобретите привычку использовать ## (намного больше, чем ###): эти отступы, как другие операторы в этом блоке кода - person Martin Mächler; 20.07.2010
comment
Я все еще за то, чтобы решить, сколько # мне следует использовать. Обычно достаточно одного, поэтому этот ответ очень ценится, поскольку мой комментарий не перемещен в место, где я не хочу, чтобы он был ... - person user989762; 29.01.2016

Установка ess-indent-with-fancy-comments в nil удалит странный одинарный # отступ, но он должен быть установлен либо локально в буфере в хуке (как в ответе Роба), либо до загрузки ESS:

(setq ess-indent-with-fancy-comments nil)
(require 'ess)

Другой способ убедиться, что он установлен до загрузки ESS, - это установить его в M-x configure или в разделе :init файла use-package.

Происходит то, что ESS определяет стили при инициализации в ess-style-alist, а затем применяет стиль по умолчанию в каждом буфере. Поэтому, чтобы убедиться, что эти стили соответствуют ess-indent-with-fancy-comment, вы должны установить его до определения стилей.

person jackkamm    schedule 24.11.2018
comment
После обновления до ESS 18.10.3 метод перехвата у меня больше не работает. setq до require ess работает. - person Yin Zhu; 27.02.2020

Ответ Джоуни не сработал для меня. Но я нашел здесь подход, который делает: https://stat.ethz.ch/pipermail/ess-help/2016-May/010970.html

   (defun my-ess-settings ()
     (setq ess-indent-with-fancy-comments nil))
   (add-hook 'ess-mode-hook #'my-ess-settings)
person Rob Donnelly    schedule 19.10.2017
comment
Да, мне тоже пришлось сделать это, чтобы он работал, иначе он будет переопределен локально. - person Palace Chan; 05.03.2018