Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在其他管线vim的末端放置一组拉伸管线_Vim - Fatal编程技术网

在其他管线vim的末端放置一组拉伸管线

在其他管线vim的末端放置一组拉伸管线,vim,Vim,我如何在其他线的末端放置一组拉伸线 之前: 11 1 2 3 10 0.0 0.045 0.09 0 之后: 11 1 0.0 2 0.045 3 0.09 10 0 要进行块选择直到行结束,即使列数不匹配,也要先垂直选择所有行中的第一列,然后按$ 因此,在您的情况下,将光标移动到0.0的第一列,按ctrl-v,将光标向下移动到最后一行,按$,就可以进行块选择。现在您可以使用d将其剪切并粘贴到第二行 编辑:因为你把这个10放在那里,粘贴部分变得有点复杂。我会首先通过最右边的一列

我如何在其他线的末端放置一组拉伸线

之前:

11 
1 
2 
3 
10 

0.0
0.045
0.09
0
之后:

11 
1 0.0
2 0.045
3 0.09
10 0

要进行块选择直到行结束,即使列数不匹配,也要先垂直选择所有行中的第一列,然后按
$

因此,在您的情况下,将光标移动到
0.0
的第一列,按
ctrl-v
,将光标向下移动到最后一行,按
$
,就可以进行块选择。现在您可以使用
d
将其剪切并粘贴到第二行

编辑:因为你把这个
10
放在那里,粘贴部分变得有点复杂。我会首先通过最右边的一列中的块,它不会干扰其他列。因此,转到第二行,在
1
之后添加两个空格,然后粘贴块。结果如下所示:

11
1  0.0
2  0.045
3  0.09
10 0

现在,您需要删除所有行中的重复空格(如果它们干扰您)。在这样一个简单的示例中,只需选择另一个块即可。在更复杂的示例中,您可以使用搜索/替换模式执行此操作。

@GeorgP.的回答已经概述了执行分块删除的必要性,以便粘贴不会创建新行,而是附加到现有行。它没有提到分块删除会留下空行,因此还有一个额外的步骤来消除它们

我经常需要将寄存器内容“强制转换”到某种(characterwise/linewise/blockwise)模式,为此我编写了相应的代码。使用它,您可以使用
4dd
完全删除第二个块(即行),然后在第二行末尾使用插件的
gbp
(按块粘贴)映射。与@GeorgP.的答案一样,这将使最后一行包含
100
,而不是
10 0
,同样的解决方法是插入额外的填充空间


然而,我的插件提供了许多其他的粘贴变体,
gBp
粘贴为带有锯齿状右边缘的最小拟合(非矩形)块。在行尾粘贴
gBp
时,将在以下行的锯齿状末端追加。这正是这里所需要的。因此,如果您愿意安装插件,整个操作可以通过
4dd2G$gBp

完成。在这种特定情况下,您还可以使用
:g
:m
对行重新排序并连接它们。光标位于第一行时,执行
}dd
删除空行。光标应位于
0.0
的行上。现在做一个简单的步骤:

:,$g/./2m-1|j

这可以使用
:g
作为行上的某种迭代器。
:g
命令选择与特定模式匹配的范围内的行,并以
:[range]g{pattern}{command}
的形式在这些匹配的行上运行命令。将其分解为更小的部分,我们有:

  • ,$
    此范围是
    ,$
    的缩写形式,表示从当前行到文件末尾。这就是光标位置很重要的原因
  • /./
    匹配包含任何字符的行,实际上是一个占位符,表示匹配每行
  • 2m-1 | j
    由两个命令组成的“棘手”部分:
    • 2m-1
      移动命令,格式为
      [range]m{address}
      。将行从范围移动到下面的地址。使用时,它意味着将第二行移动到地址
      -1
      ,这本身就是另一种“诡计”
      -1
      -1
      的缩写形式,表示当前行位置(
      )减去一。此时,向上移动光标,使其位于刚刚移动的直线上
    • j
      join命令,使用空格将当前行连接到下一行
您可以通过运行
:2m-1
,然后在从
0.0
行开始的每行上运行
:j
来模拟逐步发生的情况。同样,这里的
:g
在最后4行中充当这些命令的迭代器

以(
*
表示光标位置)开头:

运行
:2移动-1将其转换为:

  11
  2
  3
  10
* 1
  0.0
  0.045
  0.09
  0 
然后
:加入

  11
  2
  3
  10
* 1 0.0
  0.045
  0.09
  0

移动到下一行并重复。

应该可以帮你完成这项工作。我一直坚持使用视觉块模式来选择列数不匹配的行中的所有字符。请尝试将OP刚刚添加到目标中的
10
,这可能会影响这种方法。我学到了一些我从未意识到的关于块选择的知识,甚至认为这可能不是OP想要的答案。这里的基本思想是将第二个元素移动到当前位置的正上方,然后加入行。完成此操作后,光标向下移动。然后重复,直到文件结束。一步一步的解释会派上用场:)
  11
  2
  3
  10
* 1 0.0
  0.045
  0.09
  0