2013-10-31 44 views
3

我有一組代表設計的平面文件(對於好奇,這些堡壘的藍圖遊戲矮人要塞):如何在vim中水平鏡像視覺選擇?

其中之一是這樣的:

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

我想鏡像左側的圖案,並將其粘貼在右側。

使用簡單的可視選擇我可以抽出並粘貼由右至左,這導致在圖案:

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

期望的結果是大致(手動完成):

`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,` 
`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,` 
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,d,d,d,d,`,` 
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,d,d,d,d,`,` 
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,d,d,d,d,`,` 
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,d,d,d,d,`,` 
`,`,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,`,` 
`,`,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,`,` 
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,d,d,d,d,`,` 
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,d,d,d,d,`,` 
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,d,d,d,d,`,` 
`,`,d,d,d,d,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,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,而導致在視覺上選擇每行得到逆轉,不只是列實際選擇。 (pastebin of result

  2. 我已經試過;rv映射建議here,同時,做反向視覺塊它把它放在一個新行(pastebin of result

後者的幾乎沒有我想要什麼,因爲我可以手動將反轉塊手動拉回/粘貼到位,但如果它不在線的末尾,這將無法正常工作。

請注意上面關於任意塊的問題的第二部分,我希望這可以用於其他情況下,即要鏡像的塊位於行尾,或行尾中間。

回答

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 

好吧,我做了一個動畫太:(我縮短您例如文本,用於顯示演示)如果你

enter image description here

+0

好!這是完美的我給的例子,但我真的想找一個會做到位。即反向的文本塊中的較大塊的中間,優選沒有自動粘貼。我想將它剪切並粘貼到位置上,然後將其反轉。 (順便說一下,你用什麼來製作GIF?) – Casey

+0

好吧,如果你想做'就地'這將比這更容易,你可以嘗試取代'正常! $「vp」與'normal!gv「vp'沒有測試,但應該可以工作。 @Casey – Kent

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 

注意,它假設你不想複製你的模式的最後兩個欄。

對了嗎?

+1

已經觸及了awk,**通常**你可以保存'while循環'。這個問題也會在vim/editor中方便地完成。因爲您不知道要從哪列反向顯示哪一列。如果該線很長,則對該列進行計數是痛苦的。 – Kent

+0

正如我所說,它可能更interesteing腳本該命令 – Thomas