今天又遇到一個問題,像有時候會看到像這樣的字「忽然」這樣的東西。我們雖然心裡面知道這可能代表兩個字,但是卻還是不知道那到底是什麼。以前我的方法就是丟進網頁裡面去,今天護教說「沒救了,就用 vi 吧」,讓我想到,對呀,說不定 vim 可以解這個問題喔!

還是一樣先說解法:


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

這次多了一個沒介紹過的,就是nr2char(),這個函數用來幫助我們把數字(number)轉成字元(character)。只是要記得把 encoding 轉換到 utf8 去,不然轉出來的東西可能不是你要的。

,就是用來表示\(string\)的意思,假設\(string\)這樣的東西有 n 個,那第 k 個就是 submatch(k)。

所以整個所作的事情就是把&#後面跟著數字取出來,交給nr2char來做轉換,如此而已。你可以嘗試轉轉看,上面那一串東西經過 vim 轉換之後會變成「忽然」這兩個字,你轉出來了嗎?