[vim ] 編碼問題及 Unicode BOM 設定

看板Editor (編輯器(vim/emacs))作者 (oversky0)時間15年前 (2010/01/29 23:03), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
下面是我 _vimrc 有關 encoding 的設定, 開啟大部份的檔案都沒問題, 不知大家有沒有更好的設定? vim 的編碼偵測常常出錯, 一開始我是用 FencView 來補強。 但是我發現如果是 cp936 的文檔中含有日文字, FencView 會用 cp932 的編號去開。 因為我找到的日文歌詞多是 cp936 的碼, 所以後來我把 FencView 的自動偵測關掉, 直接由 fileencodings 的順序來決定。 如果還有錯,就用 FencView 增加的選單來改編碼。 FencView 的 bug 我已經於去年十月就通報給作者, 不過目前還沒更新。 我試過一些不同的設定,大家可以參考下面的網址, 紅色代表編碼偵測錯誤。 https://spreadsheets.google.com/ccc?key=0Alf0sK-moZNJdElYWnhzbVFiOGJFQzI0MnJydGx6UGc&hl=en P.S. 這樣會強制使用英文選單。 P.S.2 記得加在 _vimrc 最前面才有效。 P.S.3 status line 的設定我再另外開一篇文章。 BOM 是標準 unicode 檔加在檔頭的辨識符號。 不過一些 HTML, XML, and Tex's 的 compilers 無法處理含有 BOM 的檔,因此下面的設定是預設為 開新檔時內定格式為 utf-8, 但不儲存 BOM。 開啟舊檔時則依原來的設定儲存。 如果新檔要用 BOM,可以在存檔前下 :set bomb 指令。 我是建立一個 "SaveAs" hotkey 每次另存新檔時提供選項。 ============ _vimrc =================================== """""""""" Multi-encoding setting, MUST BE IN THE BEGINNING OF .vimrc! " Plugins: " 1. FencView : Add encoding options to menu. " http://www.vim.org/scripts/script.php?script_id=1708 if has("multi_byte") if &termencoding == "" let &termencoding = &encoding endif let $LANG="UTF-8" "zh_TW.UTF-8" set langmenu=none "Force English menu for execute menu command set encoding=utf-8 set fileencodings=ucs-bom,utf-8,big5,euc-tw,cp932,sjis,euc-jp,gbk,cp949,cp1253,latin1 set ambiwidth=double else echoerr "Sorry, this version of (g)vim was not compiled with +multi_byte" endif let g:fencview_autodetect = 0 "Turn off FencView auto dectecion on startup "For CJK users who need symbols like the dash to be double-width" "http://vim.wikia.com/wiki/Working_with_Unicode "set bomb "DON'T UNCOMMENT THIS LINE. Open new file in utf-8 with Bom (Byte "Order Mark). "BOM is a file header that help programs recognize the file is unicode "encoded. However, some HTML, XML, and Tex's compilers/render engines "can't recognized files with BOM and echo errors. So I set the default "value off. "For editing old file, the option "set fileencodings=ucs-bom" above will "read the header of the "file and keep BOM as it was, so the modified file "keeps its original encoding format. " "For editing new file, use FencView in the menu bar to choose correct "encoding. The current encoding is shown on the statusline. "Use ":set bomb" only when you really want to save a multi-encoding (CJK) "unicode. " F4 SaveAs noremap <F4> :call SaveBOM()<CR>:browse confirm saveas<CR> inoremap <F4> <C-O>:call SaveBOM()<CR><C-O>:browse confirm saveas<CR> vnoremap <F4> <C-C>:call SaveBOM()<CR>:browse confirm saveas<CR> cnoremap <F4> <C-C>:call SaveBOM()<CR>:browse confirm saveas<CR> function SaveBOM() let l:choice=confirm("Save with BOM?\nYes for multi languages.\nNo for Latex, HTML, XML.", "&yes\n&no", 0) if l:choice==1 setlocal bomb else setlocal nobomb endif endfunction -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.136.191 ※ 編輯: oversky0 來自: 114.42.136.191 (01/29 23:14) ※ 編輯: oversky0 來自: 114.42.136.191 (01/29 23:19) ※ 編輯: oversky0 來自: 114.42.136.191 (01/29 23:19) ※ 編輯: oversky0 來自: 114.42.136.191 (01/29 23:28) ※ 編輯: oversky0 來自: 114.42.136.191 (01/29 23:31) ※ 編輯: oversky0 來自: 114.42.136.191 (01/30 02:32)
文章代碼(AID): #1BOlZAE1 (Editor)
文章代碼(AID): #1BOlZAE1 (Editor)