3

我有一组代表设计的平面文件(对于好奇,这些是游戏矮人要塞的堡垒蓝图):

其中一个看起来像这样:

`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d
`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d
`,`,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
`,`,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d
`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d
`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d
`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d

我想把左边的图案镜像,然后粘贴到右边。

使用简单的视觉选择,我可以从右到左拉出并粘贴图案,结果是:

`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,
`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,
`,`,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d`,`,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,
`,`,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d`,`,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,
`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,
`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,
`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,

所需的结果大致是(手动完成):

`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`
`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,d,d,d,d,`,`
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,d,d,d,d,`,`
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,d,d,d,d,`,`
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,d,d,d,d,`,`
`,`,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,`,`
`,`,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,`,`
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,d,d,d,d,`,`
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,d,d,d,d,`,`
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,d,d,d,d,`,`
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,d,d,d,d,`,`
`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`
`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`
`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`

我怎样才能水平镜像这个粘贴的视觉选择?将任意视觉选择的块镜像到位的解决方案是什么?

  1. 我试过视觉选择它并运行:'<,'>!rev,但这会导致视觉选择中的每一行都被反转,而不仅仅是实际选择的列。(结果的粘贴箱

  2. 我已经尝试过这里;rv建议的映射,虽然它确实反转了视觉块,但它把它放在了一个新的行上(结果的 pastebin

后者几乎可以满足我的要求,因为我可以手动将反转的块拉回/粘贴回原位,但如果它不在行尾,这将无法正常工作。

请注意上面关于任意块的问题的第二部分,我希望这适用于要镜像的块位于行尾、行首或中间的其他情况。

4

2 回答 2

3

vim 有一个选项ri,它可以反向插入,我认为它可以帮助解决您的问题,但我不知道如何将它用于您的问题。

然而,总有办法做到这一点。我用映射写了一个小函数:

function! Mirror()
    try
        let v_save = @v
        normal! gv"vy
        let l = split(@v,'\n')
        call map(l,'join(reverse(split(v:val,"\\ze")),"")')
        call setreg('v',join(l,"\n"),visualmode())
        normal! $"vp
    finally
        let @v=v_save
    endtry
endfunction 
noremap  <silent> <leader>mr :<c-u>call Mirror()<cr>

获取它,然后视觉选择要“镜像”的块文本,然后按:

<leader>mr

它会为你做镜子。并且新文本将始终位于行尾。这适用于您当前的问题。如果你想改变它,你可以修改该行

normal! $"vp

好的,我也做了一个动画:(我缩短了你的示例文本,用于展示演示)

在此处输入图像描述

于 2013-10-31T12:18:25.843 回答
0

这对我有用,它是一个 bash cmd,你可以编写脚本:

while read line; do reverse="$(echo "$line" | awk -F "," 'BEGIN {OFS=","} {rev="";for(i=NF-2;i>0;i--) {rev= rev "," $i}; print rev }')"; echo "$line,$revers";done < yourFile

请注意,它假定您不想复制模式的最后两列。

可以给你?

于 2013-10-31T11:57:47.513 回答