我有以下代码,我使用的代码更新了我正在使用的一些遗留代码的编码风格。它现在可以正常工作,但令人烦恼的是,在某个区域执行该命令后,缓冲区会滚动,因此该区域的顶部位于窗口的顶部。我怎样才能解决这个问题?恢复Emacs中的垂直缓冲区位置
(defun mkm/cleanup()
(interactive)
(let (start end doit)
(if (region-active-p)
(setq start (region-beginning) end (region-end) doit t)
(progn (setq start (point-min) end (point-max))
(setq doit (y-or-n-p "Really cleanup whole buffer? "))))
(if doit
(save-excursion
(save-restriction
(narrow-to-region start end)
(replace-regexp "\([[:alpha:]]\)[ ]+" "\1 " nil (point-min) (point-max))
(replace-regexp " *&" " &" nil (point-min) (point-max))
(replace-regexp "[ ]*\\*" " *" nil (point-min) (point-max))
(replace-regexp "(+" "(" nil (point-min) (point-max))
(replace-regexp " +)" ")" nil (point-min) (point-max))
(replace-regexp "{ +" "{" nil (point-min) (point-max))
(replace-regexp "} +" "}" nil (point-min) (point-max))
(replace-regexp " +]" "]" nil (point-min) (point-max))
(replace-regexp "\s*,\s*" ", " nil (point-min) (point-max))
(replace-regexp "\s*->\s*" "->" nil (point-min) (point-max))
(replace-regexp "\\[ +" "\\[" nil (point-min) (point-max))
(replace-regexp " += +" " = " nil (point-min) (point-max))
(replace-regexp "\([[:alpha:]]\)[ ]+>" "\1>" nil (point-min) (point-max))
(replace-regexp "<\s+" "<" nil (point-min) (point-max))
(replace-regexp "<<\([^\s]\)" "<< \1" nil (point-min) (point-max))))
(message "Cleanup aborted."))))
大,这个工作!我认为你的意思是'save-window-excursion'是相关的函数。感谢您提出重新分解,我认为这样更好:) – mkm