Как комментировать / раскомментировать строку или регион, не отмечая полностью область, которую я хочу комментировать
Возможно дублирование Emacs комментария / раскомментируйте текущую строку
Мне бы хотелось что-то похожее на ответ Герстманна в приведенном выше вопросе, но ответ не слишком удачен, если конец региона не является концом линии. Например, комментирование с использованием функции Герстманна
(global-set-key (kbd "C-;") 'backward-delete-char-untabify)
(global-set-key (kbd "C-c C-c") 'comment-or-uncomment-region-or-line)
с регионом
(global-set-key (kbd "C-;") '(STARTPOINT)backward-delete-char-untabify)
(global-set-key (kbd "C-c C-c") 'comment-or-uncomment-(ENDPOINT)region-or-line)
приведет к
(global-set-key (kbd "C-;") ';; backward-delete-char-untabify)
;; (global-set-key (kbd "C-c C-c") 'comment-or-uncomment-
region-or-line)
Я хотел бы, чтобы это было вместо этого
;; (global-set-key (kbd "C-;") 'backward-delete-char-untabify)
;; (global-set-key (kbd "C-c C-c") 'comment-or-uncomment-region-or-line)
Как я могу сделать это и так же, когда раскомментируем, то же самое, когда раскомментируем все, что касается региона. Я уверен, что есть случаи, когда это может быть не методом комментирования идей, но в данный момент мне кажется, что это лучше.
1 ответ
Вы выбрали плохой пример, так как в отличие от некоторых языков, LISP не основан на строках. Так что с вашим подходом, начиная с
(progn
~(foo)
(bar)|)
ты получаешь:
(progn
;; (foo)
;; (bar))
что является ошибкой
Вот код в любом случае, может быть, вы можете использовать его для Python или что-то:
(defun comment-line-based (beg end)
(interactive "r")
(let (deactivate-mark)
(goto-char beg)
(beginning-of-line)
(set-mark (point))
(goto-char end)
(end-of-line)
(comment-dwim nil))
(deactivate-mark))
Он должен работать как для комментариев, так и для комментариев.