在其他管线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
)减去一。此时,向上移动光标,使其位于刚刚移动的直线上
join命令,使用空格将当前行连接到下一行j
: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