Во многих языках комментарий строки начинается с одного символа, например # в Python и R.

Я обнаружил, что в Emacs при написании таких строковых комментариев мне приходится дважды повторять символ комментария, чтобы сделать правильный отступ.

См. Следующий пример:

(setq x-select-enable-clipboard t)
                                        ;using a single comment symbol indents wrongly
;; repeating the comment symbol indents fine
(setq-default c-basic-offset 4)

С синглом; в начале строки нельзя получить правильный отступ. Как получить правильную настройку? Спасибо!

РЕДАКТИРОВАТЬ:

Я сам нашел решение. В документе ESS:

Комментарии также обрабатываются ESS особым образом с использованием идеи, заимствованной из стиля отступов Emacs-Lisp. По умолчанию комментарии, начинающиеся с «###», выравниваются по началу строки. Комментарии, начинающиеся с «##», выравниваются по текущему уровню отступа для блока, содержащего комментарий. Наконец, комментарии, начинающиеся с '#', выравниваются по столбцу справа (по умолчанию 40-й столбец, но это значение контролируется переменной comment-column) или сразу после выражения в строке, содержащей комментарий, если он расширяется. за пределами столбца отступа. Вы отключаете поведение по умолчанию, добавляя строку (setq ess-fancy-comments nil) в ваш файл .emacs.

Итак, я поместил это в свой .emacs:

(setq ess-fancy-comments nil) ; this is for ESS

Я думаю, что для режима Python у него есть аналогичная переменная.

13
Yin Zhu 11 Окт 2014 в 11:40

2 ответа

Лучший ответ

Основной режим должен позаботиться об этом должным образом. Если нет, рассмотрите возможность подачи запроса на улучшение или отчета об ошибке сопровождающим. Конечно, «правильно» может быть в глазах смотрящего. Однако вы можете попытаться заявить о своих предпочтениях. И проверьте, возможно ли, что в коде основного режима уже есть пользовательские параметры для этого.

Кроме того, этим управляет функция, являющаяся значением переменной comment-indent-function . Обычно это устанавливается основным режимом. Вы можете установить его на любую функцию, которую хотите (например, на ловушку режима, чтобы ваше определение переопределило определение, предоставленное кодом основного режима).

Он не принимает аргументов и возвращает столбец, к которому должен быть добавлен отступ в комментарии.

Вот код, который делает отступ для комментария до столбца 0, например:

(defun foo () (setq comment-indent-function (lambda () 0)))
(add-hook 'SOME-MODE-HOOK 'foo 'APPEND)

Например, для режима Emacs-Lisp вы должны использовать (add-hook 'emacs-lisp-mode-hook 'foo 'APPEND).

2
Drew 11 Окт 2014 в 16:16

В вашем примере используется Emacs Lisp, в этом языке стандартное соглашение заключается в том, что один ; имеет отступ вправо, тогда как два ;; имеют отступ, как если бы код был с отступом в этой точке. Я настоятельно рекомендую вам придерживаться этого соглашения, иначе ваш код будет отличаться от других. И три ;;; с отступом влево. Четыре ;;;; оставляются с отступом и используются для основных разделов. (См. https://www.gnu.org/software /emacs/manual/html_node/elisp/Comment-Tips.html)

Насколько мне известно, для Ruby комментарии всегда имеют отступ как код.

12
Krazy Glew 7 Июл 2017 в 21:50