如何实现“;粘贴-d'␣'”;Vim中的开箱即用行为?

如何实现“;粘贴-d'␣'”;Vim中的开箱即用行为?,vim,paste,Vim,Paste,Vim能做些什么来影响粘贴-d'shell吗 命令,然后通过运行它:r!粘贴-d“” < P>什么是本地VIM命令,如果有的话? 首先,让我们考虑一个稍微不同但紧密相关的。 问题:立即将一个行范围追加到另一个行范围 在它之前。解决它之后,我们将返回到原始状态 问题的第二部分是答案,并将展示 原始问题可以简化为建议的问题 1.在不限制一般性的情况下,我们假设 行块(要附加第二行的行)从 缓冲区的第一行,并且光标位于最后一行 第一个街区的那条线。在这种情况下,可以使用 以下是简短有效的Ex命令: :

Vim能做些什么来影响粘贴-d'shell吗 命令,然后通过
运行它:r!粘贴-d“”


< P>什么是本地VIM命令,如果有的话?

首先,让我们考虑一个稍微不同但紧密相关的。 问题:立即将一个行范围追加到另一个行范围 在它之前。解决它之后,我们将返回到原始状态 问题的第二部分是答案,并将展示 原始问题可以简化为建议的问题

1.在不限制一般性的情况下,我们假设 行块(要附加第二行的行)从 缓冲区的第一行,并且光标位于最后一行 第一个街区的那条线。在这种情况下,可以使用 以下是简短有效的Ex命令:

:1,g/^/''+m.|-j!
:global
命令在从第一行到第二行的范围内运行 当前的一个,依次执行两个Ex命令:
“”+m.
-j。前者,
:move
命令删除该行旁边的行 放置光标的位置,并将其插入到 一个当前正在由
:global
命令处理。后者,,
:join
命令,将刚移动的行附加到上面的行(不带 由于
修饰符,在它们之间添加或删除空格)

这些命令的构造利用了两个隐式 事实。首先,在执行
:global
中指定的命令之前 在另一行中,光标位于 那条线。这意味着引用为
的地址对应于 当前正在其上运行命令的最新行。第二 将
:global
命令发送到执行之前的光标位置为 添加到跳转列表中。因此,该位置可以在 范围通过
伪标记(请参见
:help:range

如果需要在连接线之间放置分隔符,可以 添加替换命令,在执行
:join
之前插入它:

:1,g/^/''+m.|s/^/\t/|-j!
有一个默认Vim语句分离行为选项 当运行
:join
命令时不使用
修改器:

:1,g/^/''+m.|-j
有关该空间分隔行为的详细信息,请参见
:help J
:帮助:加入
,尤其是可以通过
:helpg这些命令,除了“gJ”

2.该技术很容易适用于所讨论的问题, 因为最初的情况可以缩小到我们现在的情况 如上所述。为此,请转到包含 要追加和复制它们的行

:%y
然后,切换到包含要附加到的文本的目标缓冲区, 并将复制的行粘贴到缓冲区当前内容的下方

:$pu|'[-
上述命令结合了两个操作:

  • 将未命名寄存器的内容粘贴到最后一行下面, 将光标移动到粘贴文本的最后一行
  • 将光标移动到粘贴前的最后一行
  • 在此基础上,可以使用前面提出的
    :global
    命令之一 马上。当然,可以同时发布粘贴和 在一次运行中转换:

    :$pu|'[-|1,g/^/''+m.|s/^/\t/|-j!
    
    My(除其他外)有
    gdp
    gdp
    映射,它们将寄存器的内容粘贴为带有查询分隔符的最小拟合(即非矩形)块,就像
    paste-d{sep}
    一样

    就像@ib.的优秀答案一样,这首先需要将源缓冲区拉入寄存器

    演示:

    预期输出是什么?因为我似乎不能让它做任何事情,除了
    cat
    。不是我的电脑坏了,就是我不明白它是怎么工作的。是否要用
    空格作为分隔符连接所有行?如果是这样的话,
    :s/\n/
    就是这样做的。您有两个带数字的文件(一个在另一个下面),并且希望使用粘贴-d将所有文件1放在所有文件2的旁边(分隔符不相关)。只是想知道vim是否可以在没有外部命令的情况下完成这项工作。