2011年6月8日 星期三

vim簡繁互轉

有聽過vim嗎?

vim就像windows下的筆記本那樣,是一個文字編輯器。(雖然她的操作方式有點傲嬌)

我把Vim當作萬用編輯器來用,常常也會有想要簡繁互轉的時候,偏偏這麼常見的功能網路上竟然找不到。



到處亂查,也只能弄出這樣的答案:
http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?post_id=136256#forumpost136256

本來是想透過新同文堂python專案來搞的,但是研究了半天,卻發現vim下只要把unicode字串塞進同文堂轉換器中就會報錯。(在python shell下卻沒問題,無法理解)

……反正同文堂方案這邊用不上就對了。

換了些想法,寫了下面的東西,總算把功能搗出來了。想用的人把它貼進vimrc裡面:


"===簡繁互轉===
":T2S轉簡體,:S2T轉繁體
command! T2S call T2S()
command! S2T call S2T()
fun T2S()
let winview = winsaveview()
let lnum = 0
for line in getline(1,'$')
let lnum = lnum + 1
call setline(lnum,iconv(iconv(iconv(line,"utf-8","big5"),"big5","gb2312"),"gb2312","utf-8"))
endfor
call winrestview(winview)
endfun
fun S2T()
let winview = winsaveview()
let lnum = 0
for line in getline(1,'$')
let lnum = lnum + 1
call setline(lnum,iconv(iconv(iconv(line,"utf-8","gb2312"),"gb2312","big5"),"big5","utf-8"))
endfor
call winrestview(winview)
endfun



然後您就可以用「:T2S」繁轉簡,或「:S2T」簡轉繁了。

特性如下:
  • 針對緩衝區進行變更,而不是檔案。如果要更新檔案別忘記:w存檔
  • 當前緩衝區必須使用utf-8格式
  • 沒有用到任何外部程式,都是vim內建的功能,因此理論上是能跨平台的,但我畢竟沒有去windows玩過,誰不能用給我吱個聲。
小心:
  • 這只是單字轉換而已,並不包括詞轉換功能。
  • 極少數沒有對應的字會出現問號
圖個方便而已,將就用吧!


希望:
  • 能夠自動偵測當前檔案是utf8繁體還是utf8簡體,一個指令搞定而不要分成兩個。
  • 還有少數該死的問號也最好能消滅掉。 

誰知道這些東西怎麼弄別忘記告訴我!

6 則留言:

  1. Vim Scripts上可以找到大陸人寫的繁簡轉換
    不過也只有字的對應而已
    http://www.vim.org/scripts/script.php?script_id=3547

    回覆刪除
  2. 多謝,我改天再試試。
    看了下原始碼,對方似乎是自己建轉換表來轉換,這還真是個大工程啊……

    回覆刪除
  3. 大陆那个, 好像不好用.

    回覆刪除
  4. Vim 7.3, Vista上不行, Linux上行.
    估计是iconv的版本问题. 我再试一试.

    回覆刪除
  5. 还是没搞定.
    后来直接用Google的cconv了. 非常感谢你.
    祝你顺利, 快乐.

    回覆刪除

☆每日吐嘈,有益身心☆
…不過還是請手下留情別太狠啊。