在Vim中,我经常删除它们(使用dd
或视线模式)移动线条,将光标移动到新位置,然后p
将它们放入:
first
second
third
如果我的光标位于 second 行,我可以使用ddp
将其移动:
first
third
second
但是使用Emacs + Evil模式,将线放回去并不会按预期工作:例如,如果我的光标位于 i 中第三中点击p
,我最终得到:
first
thisecondrd
如何在放入整个拉线时使Emacs + Evil模式插入新行?
答案 0 :(得分:1)
如果我想要这种行为,我会在yanking之前使用C-a来到行的开头(可能是邪恶模式中的^)。如果你经常这样做,你可能会想出你自己的事情,虽然你必须在杀戮部分弄清楚,如果你这样做。 (或者你可以检查猛拉的东西是否有新行,我猜?)
顺便说一句,有一个transpose-lines命令(常规Emacs绑定中的C-x C-t - 有人建议将其绑定到xtl - https://github.com/syl20bnr/spacemacs/blob/master/my-keybindings.el)。
答案 1 :(得分:1)
如果我将光标放在我要移动的一条线上,我的自然反应是首先使用C-a
C-k
C-k
或{{{ 1}} C-a
C-space
C-n
(其中任何一个也可以通过复制C-w
或C-k
或前缀{{1}来获取多行序列使用数字参数),然后前往我想要粘贴并执行C-n
拉伸的行的开头。
请注意,Emacs认为文件是字符的蒸汽,其中换行或回车不是特殊的。与vi不同,您可以C-n
向右前移,就像它是正常的角色一样;退格;或将其包含在已删除和缓冲的缓冲区中。它与任何其他角色完全一样。也许Emacs适用于那些将文件视为字符序列的人 - 其中一些恰好是换行符 - 而vi适用于那些将文件视为行的人,这些人被谁知道什么却神奇地分开,但肯定不是像任何其他角色一样。
答案 2 :(得分:0)
如果您尝试解决的主要用例是向上或向下移动线(而不是更常见的问题,如何“使Emacs + Evil模式在插入整个线条时插入新线条行“),我建议你试试move-text
。
这是一个非常小的附加软件包,它分别为上下移动行提供了两个命令(move-text-up
和move-text-down
)。您可以任何地方在线路上并呼叫这些; 无需杀死任何东西,它们也适用于地区。
例如,在这种情况下调用move-line-down
(在second
之后点):
first line
second| line
third line
将产生
first line
third line
second| line
正如您所料,通过调用带有数字前缀的相应命令,可以使当前行(或区域)向上或向下移动n
行。
默认情况下,命令绑定到 M-up 和 M-down ,但您应该可以将它们重新绑定到您喜欢的关键序列
(define-key evil-normal-state-map "mu" 'move-line-up)
(define-key evil-normal-state-map "md" 'move-line-down)
MELP可以move-text
package-install
。