Emacs - 在标记整个缓冲区和缩进区域后将光标移回

Emacs - 在标记整个缓冲区和缩进区域后将光标移回

我是 Emacs 新手,为了在 Emacs 中自动重新格式化我的源代码,我创建了简单的宏使用mark-whole-bufferindent-region命令,映射到 Cj 快捷方式:

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

但是,执行时,光标的原始位置会丢失,新光标位置会设置为缓冲区的开头。有什么方法可以执行此宏并将光标返回到其先前的位置?我在 Ubuntu 14.04 上使用 GNU/Emacs 24.3。

谢谢

答案1

不要使用宏,请考虑使用函数。该函数indent-region包含区域开始和结束的参数。因此,您可以评估(indent-region (point-min) (point-max))以处理整个缓冲区。您也可以使用一个简单的函数来做同样的事情:

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

虽然这里不需要,但是将来您可能需要使用类似的功能save-excursion让您回到原来的点。

相关内容