【发布时间】:2011-05-24 02:30:45
【问题描述】:
M-x flush-lines ^$
删除缓冲区中的所有空行。但是我只想删除多余的空行,即如果有n个连续的空行我想删除n-1并保留一个。
我知道 delete-blank-lines 可以处理该点下的空白行,但是我想要一个适用于整个缓冲区的简单解决方案。
任何想法如何做到这一点?特别是可以修改我的第一个示例中的正则表达式 ^$ 以仅匹配额外的行吗?
【问题讨论】:
M-x flush-lines ^$
删除缓冲区中的所有空行。但是我只想删除多余的空行,即如果有n个连续的空行我想删除n-1并保留一个。
我知道 delete-blank-lines 可以处理该点下的空白行,但是我想要一个适用于整个缓冲区的简单解决方案。
任何想法如何做到这一点?特别是可以修改我的第一个示例中的正则表达式 ^$ 以仅匹配额外的行吗?
【问题讨论】:
C-x h M-x replace-regexp RET ^ C-q C-j C-q C-j + RET C-q C-j RET
标记整个缓冲区并用一个空行替换两个或多个空行。
【讨论】:
M-x replace-regexp RET ^ C-q C-j $ RET RET。这将用一个替换两个连续的空行。
我不知道这个内置函数,但你可以这样做:
M-x 仅单行
(defun single-lines-only ()
"replace multiple blank lines with a single one"
(interactive)
(goto-char (point-min))
(while (re-search-forward "\\(^\\s-*$\\)\n" nil t)
(replace-match "\n")
(forward-char 1)))
【讨论】:
C-x C-o (删除空白行)正是这样做的。你只需要一点宏魔法就可以在整个缓冲区上运行它。
【讨论】:
C-x C-o,C-x o 调用other-window。