vim - 如何在 Vim 中开箱即用地实现 “paste -d ' ␣'” 行为?

标签 vim paste

Vim 可以做些什么来达到 paste -d ' ' 的效果吗? shell
命令,然后通过 :r !paste -d ' ' 运行它?

可用于此目的的原生 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 ,:help :join ,尤其是可以找到的段落:helpg These commands, except "gJ" .
2. 该技术很容易适用于所讨论的问题,
因为最初的情况可以缩小到我们所拥有的情况
以上考虑。为此,请转到包含
追加和复制它们的行,
:%y
然后,切换到包含要追加的文本的目标缓冲区,
并将复制的行粘贴到缓冲区的当前内容下方,
:$pu|'[-
上面的命令结合了两个 Action :
  • 将未命名寄存器的内容粘贴到最后一行下方,
    将光标移动到粘贴文本的最后一行。
  • 将光标移动到粘贴前的最后一行。

  • 在那之后,其中之一是 :global可以使用之前提出的命令
    立即地。当然,也可以同时发布粘贴和
    在一次运行中转换:
    :$pu|'[-|1,g/^/''+m.|s/^/\t/|-j!
    

    关于vim - 如何在 Vim 中开箱即用地实现 “paste -d ' ␣'” 行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9658612/

    相关文章:

    filter - 将 CKEditor 高级内容过滤器应用于字符串

    python - 使用 Pyramid 服务文件

    linux - 是否可以在 vim 中为 'specific symbol' 提供用户定义的颜色?

    vim - 如何在vim中使用pythontidy

    internet-explorer-8 - 将 HTML 粘贴到 IE8 中

    bash - 如何使用shell将一些不同大小的文件合并到一个excel文件中?

    r - R在将paste()用于向量时防止重复项

    当我删除它时 Vim 会复制文本,但我如何禁用它?

    vim - 在 Vim 中合并多个文本文件

    regex - 有没有办法允许在 vim 正则表达式中的字符集中使用\w ?