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的主要内容,如果未能解决你的问题,请参考以下文章

求高手编写C语言求3*3矩阵的逆矩阵! 具体数值在问题补充里!

获取连接的逆?

SQL LIKE '%value%' 的逆

如何使用 GenericRelation 的逆

Core Data 关系可以是它自己的逆关系吗?

CoreData 中的逆关系是啥