:map e a_<ESC>l~
接著用 /[a-z][A-Z] 搜可能是 camel case 的部份, 確定是的話就按 e 修正。接著按 n 跳到下個地方。遇到一片連續的 camel case, 就 nenenenenen ..... 用力的敲下去, 很有快感!
或是用 record 也 OK, 操作如下:
- qe # 錄到 e 裡
- a_<ESC>l~ # 這裡是真的按 ESC 鍵
- q
之後一樣先搜到可疑之處, 若是的話按 @e 重播剛才錄下的操作。
關鍵在於後面的 \l (小寫 L) 會把下一個字元轉成小寫 (\u 則是轉大寫), 所以先用 regular expression (regexp) 記好前面的小寫 (\1) 和後面的大寫 (\2), 就很容易啦。之所以看起來這麼亂, 是因為 vim 的 regexp 語法大多要多加反斜線 。詳見 substitute 和 sub-replace-special。
2010-03-28 更新
感謝 keitheis 提供直接用 ex mode substitution 的作法, 簡化後的寫法如下::% s/\(\l\)\(\u\)/\1_\l\2/gc
關鍵在於後面的 \l (小寫 L) 會把下一個字元轉成小寫 (\u 則是轉大寫), 所以先用 regular expression (regexp) 記好前面的小寫 (\1) 和後面的大寫 (\2), 就很容易啦。之所以看起來這麼亂, 是因為 vim 的 regexp 語法大多要多加反斜線 。詳見 substitute 和 sub-replace-special。
上次沒張貼成功的……牛刀 :P
回覆刪除%s/\(\l\w\{-}\)\(\u\w\)\(\l\w\+\)/\1_\l\2\3/gc
PS. 前面少了一個 :
回覆刪除