Как закомментировать текущую строку в paredit?

Я использую M-; закомментировать текущую строку или закомментировать регион с наборами меток, прежде чем я встретлю режим paredit.

Но в режиме паредита кажется, что я не могу закомментировать текущую строку, пока я C-a и вставить ; вручную или пометить строку, прежде чем я M-; так как в этом режиме использовать M-; в начале строки вставим ;;; над строкой и в середине или конце строки вставляется комментарий окончания строки.

Итак, мой вопрос, как закомментировать текущую строку более элегантным способом?

4 ответа

Я не думаю, что paredit предоставляет какую-либо команду для комментирования строки, поэтому я поделюсь советом, который работает независимо от того, использует ли paredit или нет.

Предположим, у вас есть этот код:

(defun my-hi ()
  (dotimes (_ 2)
    (print "hello")
    (print (+ 1
              2))
    (print "world"))
  (print "the end"))

Если вы хотите закомментировать третью строку, вы просто выбираете выражение и затем нажимаете M-;, То есть вы перемещаете точку в любой пробел перед выражением (print "hello") а затем нажмите C-M-SPC чтобы выбрать выражение, а затем нажмите M-; закомментировать выражение.

Что если вы хотите закомментировать две строки, например, что если вы хотите закомментировать выражение (print (+ 1 2)) который охватывает две строки? Это то же самое, вы перемещаете точку в любой пробел перед началом выражения, а затем нажимаете C-M-SPC M-;,

А что если вы хотите закомментировать строку, содержащую выражение (print "world")? Но это плохая идея. Вместо этого вы хотите закомментировать только выражение (print "world"), Как это сделать? Опять то же самое.

Что если вы хотите закомментировать все операторы в цикле, кроме первого, то есть, что если вы хотите закомментировать (print (+ 1 2)) а также (print "hello")? Переместите точку перед началом первого выражения, которое вы хотите закомментировать, а затем нажмите C-M-SPC два раза, чтобы выбрать два выражения, а затем нажмите M-;,

Выбор выражений (в отличие от выбора строк) не только безопаснее (в том смысле, что не вводится несовпадающий знак скобок), но и более удобен. Например, как бы вы прокомментировали форму dotimes? С помощью C-M-SPC выбрать целую форму dotimes удобнее, чем выделять пять строк одну за другой.

Мораль этой истории похожа на следующую мораль Vim: "В Vim дело в том, что вы работаете с текстовыми объектами (словами, строками, предложениями, блоками кода и т. Д.), А не с буквами".

При редактировании на Лиспе дело в том, что вы работаете с выражениями (sexps), а не со строками или буквами.

Чтобы сделать это более удобным, вы можете захотеть определить команду, которая закомментирует первые N выражений после точки, в которой N определяется числом последовательных вызовов команды или префиксным аргументом. Или команда, которая закомментирует одно выражение после точки и перемещает точку в начало следующего выражения, если оно есть.

Если вы действительно хотите закомментировать текущую строку, введите Cq; в начале строки.

Проблема в том, что это почти никогда не то, что вы хотите.

Просто введите ; закомментировать все, что можно прокомментировать в строке с самого начала. (Любые последующие закрывающие разделители будут перемещены на следующую строку.)

Если вы пытаетесь прокомментировать пустую строку или конец одного, просто используйте ; с курсором, где ; должно быть. При комментировании кода следует рассмотреть возможность комментирования s-выражения вместо строки. Таким образом, баланс скобок может быть сохранен. Паредит предоставляет полезный интерфейс для этого.

; Клавиша может быть использована для форм более низкого уровня, и они будут автоматически сбалансированы с помощью paredit, хотя я нахожу это более уродливым: (курсор | но нет #| или же |#)

(foo (bar | baz) quuz)

будет выглядеть так:

(foo (bar ; baz
  ) quuz)

Но

|(blah bla bl a)

выдает ошибку.

Если SLIME установлен, то slime-insert-balanced-comments можно использовать, что с радостью вставит комментарий при сохранении сбалансированных скобок. Этот комментарий оказывается прочитанным макросом, использующим #| а также |#, Всегда можно C-q ; но это сделает их неуравновешенными. Весь смысл паредита в том, чтобы держать их в равновесии.

(|defun (blah) blah) -> #|(defun (blah) blah)|#

Он комментирует форму самого низкого уровня:

(foo (bar | fuux) duux) -> (foo #|(bar | fuux)|# duux)

У меня есть это в моем .emacs.el файл, потому что slime-insert-balanced-comments по умолчанию не привязан к ключу.

(global-set-key (kbd "C-c ;") 'slime-insert-balanced-comments)
Другие вопросы по тегам