M-q 的逆,一个 unfill-paragraph-function
Posted
技术标签:
【中文标题】M-q 的逆,一个 unfill-paragraph-function【英文标题】:Inverse of M-q, an unfill-paragraph-function 【发布时间】:2011-07-15 13:32:00 【问题描述】:M-q 是否有逆元,某种unfill-paragraph-function
?
如果我有撤消数据,那当然很容易。我所要求的是能够将段落中的行合并成一个长行,就在我刚刚从磁盘读取文件之后。这样就可以将文本粘贴到期望每个段落有一个换行符的表单(网络表单等)中。
过去我关闭了auto-fill
,创建了一个宏来删除一个EOL并移动到下一行,并反复应用它,但这越来越累了。
【问题讨论】:
【参考方案1】:Here's the answer。简而言之:
(defun unfill-paragraph ()
"Replace newline chars in current paragraph by single spaces.
This command does the reverse of `fill-paragraph'."
(interactive)
(let ((fill-column 90002000))
(fill-paragraph nil)))
(defun unfill-region (start end)
"Replace newline chars in region by single spaces.
This command does the reverse of `fill-region'."
(interactive "r")
(let ((fill-column 90002000))
(fill-region start end)))
更新:我已经打包了 here,它可以从 Marmalade 或 Melpa 安装。
【讨论】:
我对那个整数很好奇。它来自哪里,是否有理由不使用most-positive-fixnum
代替?
您必须询问原作者,但most-positive-fixnum
可能并不存在于每个 Emacs 版本和变体中。我也很好奇。
很好的链接。从同一来源,comment-uncomment-block 更好:xahlee.org/emacs/modernization_fill-paragraph.html 这将是我新的默认 M-q 命令。【参考方案2】:
另见 M-^(删除缩进)。
它将当前行连接到上一行,因此如果您从段落最后一行的点开始,您可以按住 M-^ 直到所有行都连接起来。
【讨论】:
这种方法没有考虑注释语法之类的东西,尽管它至少足够聪明,可以在适当的标点符号后插入空格(取决于模式)。 phils: "如果有填充前缀,则从本行开头删除"。在第一个非填充前缀列处,您可以使用 C-x 。 (set-fill-prefix) 然后 M-^ 将按照您想要的方式工作。很遗憾 M-^ 不像 M-q 那样自己找出填充前缀。【参考方案3】:我第一次使用@sanityinc 的解决方案有一段时间,直到遇到Stefan Monnier's Unfill Paragraph in EmacsWiki。看起来更健壮
;;; Stefan Monnier <foo at acm.org>. It is the opposite of fill-paragraph
(defun unfill-paragraph (&optional region)
"Takes a multi-line paragraph and makes it into a single line of text."
(interactive (progn (barf-if-buffer-read-only) '(t)))
(let ((fill-column (point-max))
;; This would override `fill-column' if it's an integer.
(emacs-lisp-docstring-fill-column t))
(fill-paragraph nil region)))
;; Handy key definition
(define-key global-map "\M-Q" 'unfill-paragraph)
M-Q
键绑定使命令变得如此简单。
【讨论】:
我不建议将键绑定到使用 Command 作为其 Meta 键的 macOS 用户:Cmd-Q 表示退出所有应用程序并注销 :) 在您的回答中值得一提吗? @dcorking 同意。但是,我根本不建议使用 Mac 命令键进行元绑定(更喜欢选项键)。因为 M-q 是填充段落(带区域)的现有绑定,所以将 M-Q 设置为完全相反的情况是有意义的。【参考方案4】:也可以看看这篇文章
http://blog.chrislowis.co.uk/2010/03/03/unfill-region-emacs.html
其中提到了非常有用的延绳模式。
【讨论】:
以上是关于M-q 的逆,一个 unfill-paragraph-function的主要内容,如果未能解决你的问题,请参考以下文章