Tuesday, March 23, 2010

vim亂碼

給未來的裕翔

剛學到一個東西

如果以vim開啟某檔案時出現類似以下亂碼

忽然

vim裡輸入


:set enc=utf8

:%s/&#\([0-9]\+\);/\=nr2char(submatch(1))/g

就可以把它轉回中文"突然"兩字

比起:%s/&#\([0-9]\+\);/\=nr2char(submatch(1))/g

也許:%s'&#\([0-9]\+\);'\=nr2char(submatch(1))'g更好閱讀

:%s'第一部份'第二部份'g

上面的意思是搜尋&#\([0-9]\+\);, 以&#開頭的至少一個數字


注意, \(\)不是要被搜尋字串的一部分, 而是有特殊意義, 讓後面的submatch

[0-9]\+\+如果不加\, 那就是當一般字元+

而我們這裡要用regexp, 因此是\+

接著是第二部份\=nr2char(submatch(1))

因為要做特殊處理, 所以一開始要\=

submatch(1)是指第一部份括起來的內容

最後, nr2char把編碼的數字換成字元

搞定^^

No comments:

Post a Comment