2011-04-04 29 views
0

我想要一個快速的宏,讓我可以將qty_on_hand之類的文本轉換爲Qty_On_Hand。沒有下劃線的詞應該大寫,因此描述將變成描述。源文本中的案例不一致,因此可能是QTY_on_Hand - > Qty_On_Hand。Vim宏到Camel_Case_With_Underscores

任何想法?

回答

0

嘗試以下操作:

:let @t="caw\<C-r>=join(map(split(@\", '_', 1), 'toupper(v:val[:0]).tolower(v:val[1:])'), '_')\n\e" 

然後,當你在正常模式下鍵入@t作爲你的要求,你會得到當前字代替。如果你想只是盲目地取代一切,然後用

:%s/\<\w\+\>/\=join(map(split(submatch(0), "_", 1), "toupper(v:val[:0]).tolower(v:val[1:])"), "_")/g 

g標誌添加c,如果你想Vim問你每次更換。

第二個解決方案假定您的源代碼中沒有非ASCII標識符。

+0

奇怪的是,當我運行宏時,它只是用宏的文本替換了單詞。是否有一些引用問題? – 2011-04-05 09:07:34

+0

@Greg Reynolds。我忘了提,'',''和''應輸入爲'',''和''。或者,使用外部雙引號和單引號:':let @ t =「caw \ = join(map(split(@ \」,'_',1),'toupper(v:val [:0])。 tolower(v:val [1:])'),'_')\ n \ e「'。 – ZyX 2011-04-06 14:49:45