我是Emacs的新手。我已经在Google上搜索过了,但没有好的答案。其中一个方法是 Ctrl-n Ctrl-a Backspace 这个方法可以用,但很愚蠢。有没有一种快速简单的方式将一块行合并成一行?
实际上,我现在可以使用Esc-q来自动填充段落,但我怎样才能在不使用UNDO的情况下撤消它呢?
我是Emacs的新手。我已经在Google上搜索过了,但没有好的答案。其中一个方法是 Ctrl-n Ctrl-a Backspace 这个方法可以用,但很愚蠢。有没有一种快速简单的方式将一块行合并成一行?
实际上,我现在可以使用Esc-q来自动填充段落,但我怎样才能在不使用UNDO的情况下撤消它呢?
在需要连接的一组行的最后一行上随意放置一个点,然后调用
M-^
一直重复此过程,直到所有行都合并为止。
注意:它在所有现在连接的行之间留有一个空格。
C-u M-^
(在我看来这更有用)。 - gypsydave5M-^
最好使用 ESC ^ SPC
。 - JohnDoeM-x join-line
可以将两行合并。只需将其绑定到方便的按键即可。
M-^
的效果完全相同,因为 join-line
被别名为 delete-indentation
,而后者绑定到了 M-^
。 - Vicky Chijwani多光标结合使用M-^,可以将选定的所有行合并到一起,并删除所有多余的空白字符。
例如,要选择整个缓冲区,请调用多光标模式,合并为一行,然后禁用多光标模式:
C-x h
M-x mc/edit-lines
M-^
C-g
Emacs中“join”的常规名称是“fill”。是的,你可以使用M-^
连接两个行 — 这很方便 — 但更普遍的情况是你想连接n
行。为此,请参见fill*
命令,例如 fill-region
,fill-paragraph
等。
有关选择可以填充的内容的更多信息,请参见此处。
此外,你也可以通过先选择这些行来使用M-^
连接多个行(请注意通用参数在这种情况下不起作用)。
fill-region
运行良好,但是 M-^
(事实上也包括 C-j
)在先选择区域后仍无法正常工作。 - ychaouchefill-width
定义的特定限制进行连接的。 - ychaouche只需将换行符替换为空即可。
我喜欢Sublime Text中使用 Command J 连接行的方式,所以我也这样做:
(defun join-lines (arg)
(interactive "p")
(end-of-line)
(delete-char 1)
(delete-horizontal-space)
(insert " "))
;; -- define a new command to join multiple lines together --
(defun join-lines () (interactive)
(setq fill-column 100000)
(fill-paragraph nil)
(setq fill-column 78)
)
(defun concat-lines ()
(interactive)
(next-line)
(join-line)
(delete-horizontal-space))
如果您希望保留光标位置,则可以使用save-excursion。
由于join-line
会在两行之间留下一个空格,而且它只支持连接两行。如果你想连接很多行而不留下一个空格,你可以使用“搜索替换”模式来解决,具体如下:
C-%
C-q C-j
Enter
Enter
Enter
完成。
最简单的方法:
- 用
M-h
或C-SPC
选择段落/行。- 按下
M-q
。- 看到Emagics(Emacs魔法)!