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

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

(defun noop ()
  nil)

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

GNU Emacs 23.1.1

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

7 ответов


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

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


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


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


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


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

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

посмотреть CLHS для сведения.


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


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

(defmacro comment (&rest a))