使用Emacs + Evil插入完整的行

时间:2014-04-25 00:00:29

标签: emacs evil-mode

在Vim中,我经常删除它们(使用dd或视线模式)移动线条,将光标移动到新位置,然后p将它们放入:

first
second
third

如果我的光标位于 second 行,我可以使用ddp将其移动:

first
third
second

但是使用Emacs + Evil模式,将线放回去并不会按预期工作:例如,如果我的光标位于 i 第三中点击p,我最终得到:

first
thisecondrd

如何在放入整个拉线时使Emacs + Evil模式插入新行?

3 个答案:

答案 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-wC-k或前缀{{1}来获取多行序列使用数字参数),然后前往我想要粘贴并执行C-n拉伸的行的开头。

请注意,Emacs认为文件是字符的蒸汽,其中换行或回车不是特殊的。与vi不同,您可以C-n向右前移,就像它是正常的角色一样;退格;或将其包含在已删除和缓冲的缓冲区中。它与任何其他角色完全一样。也许Emacs适用于那些将文件视为字符序列的人 - 其中一些恰好是换行符 - 而vi适用于那些将文件视为行的人,这些人被谁知道什么却神奇地分开,但肯定不是像任何其他角色一样。

答案 2 :(得分:0)

如果您尝试解决的主要用例是向上或向下移动线(而不是更常见的问题,如何“使Emacs + Evil模式在插入整个线条时插入新线条行“),我建议你试试move-text

这是一个非常小的附加软件包,它分别为上下移动行提供了两个命令(move-text-upmove-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