2

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

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

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

对此:并排

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

编辑:谢谢大家,肯特解决方案有效,奇怪的是在set ve=allC-Q不允许选择像这样的块之前

############
###############
#########
#########
#########

我无法到达第二行的最后一列(使用gvimon win XP)。

现在效果很好我也会使用Ingo Karkat插件”

4

2 回答 2

1

这其中的关键是分块视觉模式。转到第二个块的开头(应该成为第一个块旁边的右列),按Ctrl+V(在 Windows 上,这通常重新映射到),使用和Ctrl+Q创建选择。. .,然后用 . 删除。然后转到第一个块的第一行,转到行尾,(可选附加填充空白),然后粘贴. 第二个块应粘贴到光标的右侧。最后,您可以删除第二个块所在的空行。$jjjd$p


我的UnconditionalPaste 插件简化了这个任务:然后你可以简单地用ddor删除第二个块Vjjj。. . ,并使用插件的映射d强制以块模式粘贴。gdp


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

于 2013-01-30T10:34:20.507 回答
1

尝试以下步骤:

:set ve=all

将光标移动到行首R) 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  

 

然后您可以在正常模式下键入<leader>mt进行转换。

笔记

  • 我没有在 windows 上使用 vim 的经验......所以你可能需要更改 windows 块选择的映射。<C-Q>? 没有把握。

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

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

在此处输入图像描述

于 2013-01-30T10:46:48.387 回答