emacs: что C-c % делает в auctex и как я могу заставить его работать лучше?

C-c % должен быть ярлыком режима auctex в emacs для комментирования вещей. (Есть также C-c ;, который комментирует отмеченную область, но этот работает). Теперь иногда он закомментирует одну строку, иногда закомментирует строку и те, что над ней. Кажется, у него не очень последовательное поведение.

То, что я действительно хотел бы сделать, это закомментировать строку, на которой находится курсор, если только она не находится в начальном или конечном теге, и в этом случае закомментируйте всю среду. (На самом деле, я бы согласился просто понять немного странное поведение макроса комментария...)


person Seamus    schedule 24.11.2010    source источник
comment
Речь идет об emacs, а не о программировании. Почему он мигрировал?   -  person Seamus    schedule 24.11.2010


Ответы (1)


C-c % работает TeX-comment-or-uncomment-paragraph. Что именно здесь считается абзацем, см. в руководстве:

Команда: TeX-comment-or-recomment-paragraph
(C-c %) Добавить или удалить % в начале каждой строки в текущем абзаце. При удалении % символов абзац считается состоящим из всех предшествующих и последующих строк, начинающихся с %, до первой строки без комментариев.


Вот функция комментирования, которая делает более или менее то, что вы хотите. Раскомментирование среды работает, только если LaTeX-syntactic-comments равно t (и не всегда очень хорошо даже тогда).

(defun LaTeX-comment-environment-or-line (arg)
  "Comment or uncomment the current line.
If the current line is the \\begin or \\end line of an environment, comment
or uncomment the whole environment."
  (interactive "*P")
  (save-match-data
    (save-excursion
      (beginning-of-line)
      (cond
       ((looking-at (concat "\\s-*\\(" TeX-comment-start-regexp "\\)?\\s-*"
                            (regexp-quote TeX-esc) "begin"))
        (let ((begin (point)))
          (goto-char (match-end 0))
          (LaTeX-find-matching-end)
          (TeX-comment-or-uncomment-region begin (point) arg)))
       ((looking-at (concat "\\s-*\\(" TeX-comment-start-regexp "\\)?\\s-*"
                            (regexp-quote TeX-esc) "end"))
        (let ((end (save-excursion (end-of-line) (point))))
          (LaTeX-find-matching-begin)
          (beginning-of-line)
          (TeX-comment-or-uncomment-region (point) end arg)))
       (t
        (TeX-comment-or-uncomment-region
         (point) (save-excursion (end-of-line) (point)) arg))))))
person Gilles 'SO- stop being evil'    schedule 24.11.2010
comment
AucTeX фактически определяет команду среды маркировки: C-c . - person Seamus; 01.12.2010