我是Emacs的新手。我用谷歌搜索了这个但没有好的答案。其中之一是 Ctrl-n Ctrl-a Backspace 这有效,但很愚蠢。是否有一种快速简单的方法将一行线加入一行?
实际上,我现在可以使用Esc-q自动填充段落,但是如果没有UNDO,我怎么能让它恢复呢?
答案 0 :(得分:176)
将点放在需要加入和调用的行组的 last 行的任意位置
M-^
重复直到合并所有行。
注意:它在所有现在连接的行之间留下一个空格。
答案 1 :(得分:32)
M-x join-line
将加入两行。只需将其绑定到方便的按键。
答案 2 :(得分:8)
只需更换换行符。
答案 3 :(得分:7)
Multiple Cursors与M-^结合将所有选定的行折叠为一个删除了所有无关的空白区域。
例如,要选择整个缓冲区,调用多个游标模式,折叠成一行,然后禁用多个游标模式:
C-x h
M-x mc/edit-lines
M-^
C-g
答案 4 :(得分:5)
我喜欢Sublime文本的方式使用Command J加入行,所以我这样做:
(defun join-lines (arg)
(interactive "p")
(end-of-line)
(delete-char 1)
(delete-horizontal-space)
(insert " "))
答案 5 :(得分:3)
您可以为此定义一个新命令,在使用Esc-q命令之前临时调整填充宽度:
;; -- define a new command to join multiple lines together --
(defun join-lines () (interactive)
(setq fill-column 100000)
(fill-paragraph nil)
(setq fill-column 78)
)
显然,只有当你的段落少于100000个字符时,这才有效。
答案 6 :(得分:3)
我使用以下功能并将其绑定到' M-J'。
(defun concat-lines ()
(interactive)
(next-line)
(join-line)
(delete-horizontal-space))
如果您希望保持光标位置,可以使用save-excursion。
答案 7 :(得分:3)
Emacs传统名称为"加入"是"填充"。是的,你可以加入
使用M-^
两个行 - 这很方便 - 但更常见的是你会这样做
想加入n
行。为此,请参阅fill*
命令,例如
fill-region
,fill-paragraph
等
有关详细信息,请参阅this 选择可以填补的东西。
答案 8 :(得分:0)
"如果没有UNDO,我怎么能让它恢复?":
(defun toggle-fill-paragraph ()
;; Based on http://xahlee.org/emacs/modernization_fill-paragraph.html
"Fill or unfill the current paragraph, depending upon the current line length.
When there is a text selection, act on the region.
See `fill-paragraph' and `fill-region'."
(interactive)
;; We set a property 'currently-filled-p on this command's symbol
;; (i.e. on 'toggle-fill-paragraph), thus avoiding the need to
;; create a variable for remembering the current fill state.
(save-excursion
(let* ((deactivate-mark nil)
(line-length (- (line-end-position) (line-beginning-position)))
(currently-filled (if (eq last-command this-command)
(get this-command 'currently-filled-p)
(< line-length fill-column)))
(fill-column (if currently-filled
most-positive-fixnum
fill-column)))
(if (region-active-p)
(fill-region (region-beginning) (region-end))
(fill-paragraph))
(put this-command 'currently-filled-p (not currently-filled)))))
(global-set-key (kbd "M-q") 'toggle-fill-paragraph)
答案 9 :(得分:0)
;;; 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)))
答案 10 :(得分:0)
因为join-line
将在两行之间留一个空格,所以它仅支持连接两行。如果您想加入很多行而又没有一个空格,可以使用“搜索替换”模式来解决,如下所示:
C-%
C-q C-j
Enter
Enter
Enter
完成。
答案 11 :(得分:0)
2行基本连接:
(delete-indentation)
我希望在下面一行插入到当前行中而不移动光标:
("C-j" .
(lambda (iPoint)
"Join next line onto current line"
(interactive "d")
(next-line)
(delete-indentation)
(goto-char iPoint)))
答案 12 :(得分:0)
这个行为就像在 vscode 中一样。因此,仅当连接行包含除空格以外的其他内容时,它才会添加空格。我将它绑定到 alt+shift+j
。
基于 crux-top-join-line 的较短版本:
(global-set-key (kbd "M-J") (lambda () (interactive) (delete-indentation 1)))
基于 https://stackoverflow.com/a/33005183/588759 的更长版本。
;; https://stackoverflow.com/questions/1072662/by-emacs-how-to-join-two-lines-into-one/68685485#68685485
(defun join-lines ()
(interactive)
(next-line)
(join-line)
(delete-horizontal-space)
(unless (looking-at-p "\n") (insert " ")))
(global-set-key (kbd "M-J") 'join-lines)
答案 13 :(得分:-1)
有史以来最简单的方式:
- 按
选择段落/行M-h
或C-SPC
- 按
M-q
- 见证 Emagics(Emacs Magic)!!
醇>