Lisp на emacs: как прокомментировать многострочное выражение?

Например, если я хочу прокомментировать это:

(defun noop ()
  nil)

Каждый раз, когда я пытаюсь поставить точку с запятой перед "(defun" , defun убегает на следующую строку. Так как это должно быть сделано?

GNU Emacs 23.1.1

Изменить: "убегая" я имею в виду, когда я вставляю точку с запятой до "(defun" , после запятой автоматически добавляется новая строка, а "(defun" начинается с новой строки снова.

Ответ 1

Ron, сделайте a CTRL-H m и посмотрите на второстепенные режимы. У вас есть "полезный" вспомогательный режим. (Может быть, paredit, но я не думаю, что это так.) Я помню, что было что-то в этом роде, когда я попробовал EMACS Starter Kit. Это продолжалось, может быть, за тридцать секунд до того, как я закричал и нашел, как его убить.

В любом случае, это не по умолчанию поведение EMACS, это дополнение init-file или site-emacs.

Ответ 2

область комментариев M-x и связанные с ней.

Ответ 3

Отметьте обе строки и вызовите M-x comment-region. Также смотрите функции comment-or-uncomment-region и comment-dwim.

Ответ 4

M-X comment-dwim или M-;, который является связующим звеном по умолчанию для первого, может сэкономить вам несколько ключевых штрихов, поскольку он не только комментирует, но и отменяет область, если он уже прокомментировал. В любом случае, посмотрите Руководство Emacs для правильного описания.

Ответ 5

Если вы говорите об Common Lisp (а не, скажем, Emacs- Lisp), вы можете использовать #+(or):

#+(or)
(defun noop ()
  nil)

Подробнее см. CLHS.

Ответ 6

Для конкретной задачи, заданной в заголовке (комментируя полное выражение, которое может охватывать сразу несколько строк), сначала нажмите C-M-SPC (привязанный к mark-sexp), чтобы установить область в следующую следующую точку; то M-; (связанный с comment-dwim, который вызовет comment-region).

Ответ 7

немного поздно вечеринке, однако, что насчет:

(defmacro comment (&rest a))