Как комментировать / раскомментировать строку или регион, не отмечая полностью область, которую я хочу комментировать

Возможно дублирование 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))

Он должен работать как для комментариев, так и для комментариев.

Другие вопросы по тегам