2010-03-24 24 views
4

鑑於以下行:VIM查找/替換2架或柱之間的空間

[aaaa bbbb cccc dddd] [decimal](18, 0) NULL, 

你怎麼會只更換第一套Vim中括號之間的空間?/s命令會是什麼樣子?

更新:

這是有意的結果

[aaaa_bbbb_cccc_dddd] [decimal](18, 0) NULL, 

回答

7

做這將是視覺上選擇[]編輯字符串的內容,只是對選擇進行替換的最簡單方法:

vi]:s/\%V \%V/_/g 

這並不能很好地工作,如果你想盡管如此,以編程方式做事情。在這種情況下,您可以匹配整個[] ed字符串並使用replacement expression來構造結果。

:s/\[[^\]]*\]/\=substitute(submatch(0), ' ', '_', 'g')/g 
+0

替換表達式很酷。我得到的最好的替換第一個空格塊,然後按&直到它告訴你它找不到模式 – McBeth 2010-03-24 20:37:03

+0

the = substitute(submatch(0)...就是我需要的。謝謝! – Glennular 2010-03-24 21:14:46

1

具有 '魔力' 的正常設置你想要做

:s/] \[/][/ 

以上fancily

:s/]\zs\s\+\ze\[// 

或與魔法等級的正則表達式明確設置

:s/\V]\zs\s\+\ze[// 

\ ZS和\澤限制替換到它們包圍的區域。

\ M完全關閉魔法,因此每個字符或字符組合不以前綴\字面意思。

'魔術'(:help 'magic')是一個全局選項,用於確定正則表達式中潛在特殊字符的解釋方式。

+0

你忘了看看隱藏和前瞻(單曲/] \ @<= \ S \ + \ [\ @ = //')。 – ZyX 2010-03-24 19:53:46

+0

這是'\ V',它可以從字面上理解除\以外的所有內容。 '\ M'是'\ V'和默認設置之間的一個步驟。改變'魔術'的價值只是要求麻煩。 – jamessan 2010-03-24 20:08:50

+0

@ jamessan哎呀,謝謝。固定。 @ZYX \ zs&\ ze更容易記住,我認爲速度更快,所以我更喜歡在可能的情況下使用它們。 閱讀更新後,我發現我的答案完全不是問題的答案。 – intuited 2010-03-24 21:11:37

-1

您可以隨時進行互動查找和替換,可以用標誌做c