【问题标题】:Insert complete lines with Emacs + Evil用 Emacs + Evil 插入完整的行
【发布时间】:2014-06-10 12:11:37
【问题描述】:

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

first
second
third

如果我的光标在 second 行,我可以使用ddp 将其向下移动:

first
third
second

但是在 Emacs + Evil 模式下,将行放回不能按预期工作:例如,如果我的光标在 third 中的 i 上,而我点击p,我最终得到:

first
thisecondrd

如何让 Emacs + Evil 模式在放置整个拉出的行时插入新行?

【问题讨论】:

  • 我无法用邪恶的 1.0-dev 版本重现这个问题。当我只删除一个单词而不是一行时,我认识到这种情况。尽可能考虑使用移动文本。
  • 我也无法重现该问题(相同的邪恶版本)。
  • 我添加了同样的问题,我是因为我的 emacs 初始化文件中的自定义复制粘贴功能。

标签: emacs evil-mode


【解决方案1】:

如果您尝试解决的主要用例是向上或向下移动行(而不是更一般的问题,即如何“使 Emacs + Evil 模式在放置整个 yanked 时插入新行行”),我建议你试试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-upM-down 但您应该能够通过

将它们重新绑定到您喜欢的键序列
(define-key evil-normal-state-map "mu" 'move-line-up)
(define-key evil-normal-state-map "md" 'move-line-down)

move-text 是来自 MELPA 的 package-installable。

【讨论】:

    【解决方案2】:

    如果我发现我的光标在我想移动的行上,我的自然反应是首先使用C-a C-k C-kC-a C-space @987654326 将行删除到kill ring @C-w(其中任何一个都可以通过复制C-kC-n或在C-n前面加上一个数字参数来获取多行序列)然后移动到我想要的行的开头粘贴并执行C-y yank。

    请注意,Emacs 将文件视为一系列字符,其中换行符或回车符并不特殊。与 vi 不同,您可以将 C-f 转发到换行符上,就像它是一个普通字符一样;在它上面退格;或将其包含在已删除和拉动的缓冲区中。它与任何其他角色完全一样。也许 Emacs 适合那些将文件视为字符序列的人——其中一些恰好是换行符——而 vi 适合那些将文件视为行的人,这些行被谁知道是什么神奇地分开了,但它肯定不是像任何其他角色一样。

    【讨论】:

      【解决方案3】:

      如果我想要这种行为,我会在拉动之前使用 C-a 转到行首(可能是邪恶模式下的 ^)。如果你经常这样做,你可能会想出你自己的东西来做 yank,尽管你必须在 kill 部分弄清楚你是否这样做。 (或者你可以检查被拉出的东西是否有换行符,我猜?)

      顺便说一下,有一个 transpose-lines 命令(常规 Emacs 绑定中的 C-x C-t - 有人建议将此绑定到 xtl - https://github.com/syl20bnr/spacemacs/blob/master/my-keybindings.el)。

      【讨论】:

      • 问题似乎是我还需要在我要插入的行的开头......是否有“插入新行”?或者那是我需要写的东西?
      猜你喜欢
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      相关资源
      最近更新 更多