如何使vim并排格式化矩阵

如何使vim并排格式化矩阵,vim,formatting,Vim,Formatting,我正在使用vim记录我的许多日常工作。我通常有很多关于矩阵的结果。当我在一天结束时粘贴这些内容时,我的页面(有时)有一列或两列 我的问题是如何让vim以编程方式格式化 这: 为了这个:肩并肩 R) DT = data.frame(x=rnorm(6),y=rnorm(6)) R) DT2 = data.frame(x=rnorm(7),y=rnorm(7)) R) DT R) DT2 x y

我正在使用vim记录我的许多日常工作。我通常有很多关于矩阵的结果。当我在一天结束时粘贴这些内容时,我的页面(有时)有一列或两列

我的问题是如何让vim以编程方式格式化 这:

为了这个:肩并肩

R) DT = data.frame(x=rnorm(6),y=rnorm(6)) R) DT2 = data.frame(x=rnorm(7),y=rnorm(7))
R) DT                                     R) DT2
           x       y                                x       y
1 -0.0007499  0.7661                      1 -0.005116 -0.4388
2  1.5559552 -0.6664                      2  2.317381  0.6597
3  0.2082094 -0.1598                      3  0.359883  0.4770
4 -0.1684766 -0.0536                      4 -1.426220  0.4911
5  3.1014233 -0.7439                      5  0.468820 -0.3260
6  0.1985104  2.0415                      6  0.626147 -0.6254
                                          7 -1.086660  2.1973

编辑: 谢谢大家,Kent解决方案工作了,奇怪的是,在我的
C-Q
不允许选择类似的块之前

############
###############
#########
#########
#########
我无法到达第二行的最后一列(在
winxp
上使用
gvim

现在效果很好 我还将使用Ingo Karkatplugin“

这一点的关键是分块视觉模式。转到第二个块的开头(第一个块旁边的右栏),按Ctrl+V(在Windows上,这通常被重新映射到Ctrl+Q),使用$和jjj…,创建所选内容,然后使用
d
删除。然后转到第一个块的第一行,$转到行的末尾(可选附加填充空格),然后用p粘贴。第二个块应粘贴到光标的右侧。最后,您可以删除第二个块所在位置左侧的空行


我的任务简化了这一任务:然后,您可以简单地用dd或vjj…d删除第二个块,并使用插件的gdp映射以块方式强制粘贴


如果您找到了确定块大小的方法(跳到下一个空行的}键在这里可能很方便),那么您可以将所有步骤放入自定义映射中。

尝试以下步骤:

:set ve=all
将光标移动到行的开头(DT2=data.frame(x=rnorm(7),y=rnorm(7))

C-V
,然后使用运动魔术选择第二个块

d

将光标移动到第一行,即要粘贴第二个块的位置。键入
p

如果您的文本总是那样的格式,您可以尝试以下映射:

:nnoremap <leader>mt :let &ve='all'<cr>gg/^R)<CR>n<c-v>G$dgg$3lp  
:nnoremap mt:let&ve='all'gg/^R)nG$dgg$3lp

然后,您可以在正常模式下键入
mt
进行转换

注意

  • 我没有在windows上使用vim的经验…因此您可能必须更改windows区块选择的映射。
    ?不确定

  • 我假设文件的第一行是
    R)…

  • 这会将第二个块粘贴到位置:第1行结束后3个空格,如果要调整,请更改映射中的数字3


对不起,我对
jjj
部分有点迷茫。我想这是用来划分块的,但我找不到如何使用它…那
jjj…
只是通过向下移动将选择扩展到所有行的最简单(不是最好的!)。哇哦,谢谢你给出了这个令人敬畏的答案!不幸的是(见下文),文本可能具有不同的shapes@statquant根据您的“不同形状”要求更新答案(映射)。请参阅动画。
:nnoremap <leader>mt :let &ve='all'<cr>gg/^R)<CR>n<c-v>G$dgg$3lp