2010年3月27日 星期六

用 vim 將 camel case 改成 underscore-based

昨天改這改到很累, 想到可以用 map 處理:
:map e a_<ESC>l~

接著用 /[a-z][A-Z] 搜可能是 camel case 的部份, 確定是的話就按 e 修正。接著按 n 跳到下個地方。遇到一片連續的 camel case, 就 nenenenenen ..... 用力的敲下去, 很有快感!

或是用 record 也 OK, 操作如下:
  1. qe  # 錄到 e 裡
  2. a_<ESC>l~ # 這裡是真的按 ESC 鍵
  3. q
之後一樣先搜到可疑之處, 若是的話按 @e 重播剛才錄下的操作。

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

2 則留言:

  1. 上次沒張貼成功的……牛刀 :P
    %s/\(\l\w\{-}\)\(\u\w\)\(\l\w\+\)/\1_\l\2\3/gc

    回覆刪除

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...