如何让vim并排格式化矩阵

时间:2013-01-30 10:07:07

标签: vim formatting

我正在使用vim来记录我的日常工作。我通常用矩阵有很多结果。当我在一天结束时粘贴那些时,我有(有时)0或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=all我的C-Q不允许选择像

这样的块
############
###############
#########
#########
#########

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

现在效果很好 我还将使用Ingo Karkat插件“

2 个答案:

答案 0 :(得分:1)

关键是 blockwise visual mode 。转到第二个块的开头(应该成为第一个块旁边的右列),按 Ctrl + V (在Windows上,这通常会重新映射到 Ctrl + Q ),用 $ j j j 创建选择。 。 。,然后使用d删除。然后转到第一个块的第一行, $ 转到行尾(可选择附加填充空格),然后粘贴 p 。第二个块应粘贴到光标的右侧。最后,您可以删除第二个块所在的空行。


我的UnconditionalPaste plugin简化了这项任务:然后您只需删除第二个块 dd V j Ĵ Ĵ。 。 。 d ,并使用插件的 gdp 映射以块模式强制粘贴。


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

答案 1 :(得分: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 blockwise选择的映射。 <C-Q>?不确定。

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

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

enter image description here