4

Я новичок в Emacs, и для автоматического переформатирования моих исходных кодов в Emacs я создал простой макрос с использованием команд mark-whole-buffer и indent-region , сопоставленных с ярлыком Cj:

(fset 'format-document
"\C-[xmark-whole-buffer\C-m\C-[xindent-region\C-m")
(global-set-key (kbd "C-j") 'format-document)

Однако при выполнении исходная позиция курсора теряется, и новая позиция курсора устанавливается в начале буфера. Есть ли способ, как выполнить этот макрос и вернуть курсор обратно в предыдущую позицию? Я использую GNU/Emacs 24.3 на Ubuntu 14.04.

Спасибо

1 ответ1

2

Вместо использования макроса рассмотрите возможность использования функции. Функция indent-region содержит аргументы для начала и конца региона. Таким образом, вы можете оценить (indent-region (point-min) (point-max)) для обработки всего буфера. Вы также можете использовать простую функцию, чтобы сделать то же самое:

(defun my-format-document ()
(interactive)
  (indent-region (point-min) (point-max)) )

Хотя в этом нет необходимости, в будущем вам может понадобиться что-то вроде save-excursion которая возвращает вас к исходной точке.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .