今天又遇到一个问题,像有时候会看到像这样的字「忽然」这样的东西。我们虽然心裡面知道这可能代表两个字,但是却还是不知道那到底是什麼。以前我的方法就是丢进网页裡面去,今天护教说「没救了,就用 vi 吧」,让我想到,对呀,说不定 vim 可以解这个问题喔!
还是一样先说解法:
:set enc=utf8
:%s/&#\([0-9]\+\);/\=nr2char(submatch(1))/g
这次多了一个没介绍过的,就是nr2char(),这个函数用来帮助我们把数字(number)转成字元(character)。只是要记得把 encoding 转换到 utf8 去,不然转出来的东西可能不是你要的。
submatch 我们之前介绍过了,就是用来表示\(string\)的意思,假设\(string\)这样的东西有 n 个,那第 k 个就是 submatch(k)。
所以整个所作的事情就是把&#后面跟著数字取出来,交给nr2char来做转换,如此而已。你可以尝试转转看,上面那一串东西经过 vim 转换之后会变成「忽然」这两个字,你转出来了吗?