Today, someone asked on the AUCTeX-devel mailing list about a way to delete (or comment out) all the instances of certain environment. Here’s my solution. It’s not 100% robust (it can be fooled by a partially commented out environment, for instance – but that shouldn’t happen anyway), but for a “normal” file it should work well enough. (If you want to comment out environments instead of deleting them, you might use comment-region
instead of delete-region
. In the case of deletion, consider using diff-buffer-with-file, just to make sure nothing important got deleted.)
Notice the use of save-mark-and-excursion. Also, LaTeX-environment-list-filtered
is used to get the list of environments for completion.
(defun LaTeX-delete-environment (env) "Delete all instances of environment ENV in the buffer." (interactive (list (completing-read "Environment to delete: " (LaTeX-environment-list-filtered)))) (save-mark-and-excursion (goto-char (point-min)) (while (search-forward (format "\\begin{%s}" env) nil t) (unless (nth 4 (syntax-ppss)) (LaTeX-mark-environment) (delete-region (region-beginning) (region-end))))))