如何使vim并排格式化矩阵
我正在使用vim记录我的许多日常工作。我通常有很多关于矩阵的结果。当我在一天结束时粘贴这些内容时,我的页面(有时)有一列或两列 我的问题是如何让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
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