在 vim 中创建 1 列中的 2 列

Create 2 columns out of 1 in vim

我有一个 2 个非常长的串联数组:

["MyHashMap"
"remove"
"put"
"remove"]
[[]
[27]
[65,65]
[19]]

我只是进入可视化模式,y 第二个数组,然后回到第一行,到它的末尾,添加 space 并点击 p .变成:

["MyHashMap"
[[]
[27]
[65,65]
[19]]
"remove"
"put"
"remove"]

我想要的输出是:

["MyHashMap" [[]
"remove"     [27]
"put"        [65,65]
"remove"]    [19]]

我怎样才能做到这一点?

:set virtualedit=all 这样你就可以将光标移动到没有字符的地方(越过行尾)。

将光标移动到第 5 行的第一列,然后使用 CTRL-V 进入可视块模式。 Select 最后四行的内容。按 d 删除选择。

将光标移动到第一行,您想要第二列的位置。按 p 粘贴。

所以...回到您的原始数据格式(为了完整起见,我添加了一个额外的“行”):

这里是数据:

$ cat yuck
["MyHashMap","remove","put","put"]
["MyMashNap","mover","gut","hut"]
[[],44],[95,30]]

这里是一个 awk 脚本:

$ cat a.f 
BEGIN{
      FS=","
}
{
  for (f = 1; f <= NF; f++) { a[NR, f] = $f } 
}
NF > nf { nf = NF }
END {
  for (f = 1; f <= nf; f++) {
      for (r = 1; r <= NR; r++) {
          printf a[r, f] (r==NR ? RS : OFS)
      }
  }
}

以及如何 运行 它:

$ awk  -f a.f yuck  | column -t
["MyHashMap"  ["MyMashNap"  [[]
"remove"      "mover"       44]
"put"         "gut"         [95
"put"]        "hut"]        30]]

使用视觉块选择:

如果你在第一行:

4j ............. jump to line five 
Ctrl-v ......... start visual block
3j$ ............ select the end of the paragraph
dgg ............ delete and goes to the first line
A<Space> ....... add an extra space
<Esc>p ......... paste deleted block