簡體   English   中英

Vim:在Windows下的終端中編碼(Unicode)

[英]Vim: Encoding (Unicode) in Terminal under Windows

我不知道為什么,但是這個話題似乎記錄不清,並且充滿了爭議,因為沒有人知道真正的答案(除了Moolenaar先生,他很少回答)。

所以基本上我已經在這里提出了一個討論,它很快就死了,可能是因為在Windows上沒有太多人在終端模式下使用Vim。

我的編碼設置如下:

if has('multi_byte')
  if empty(&termencoding)
    let &termencoding = &encoding
  endif
  let &encoding     = 'utf-8'
  let &fileencoding = 'utf-8'
endif

當然,我在GVim下運行沒有問題:可以輸入任何字符,我修補的Consolas for Powerline工作得很好。 當我嘗試在終端模式下運行Vim時,問題就出現了。 我使用ConEmu ,一個功能豐富的Windows終端模擬器。 它聲稱正式支持Unicode開箱即用。 例如,我可以運行以下測試腳本:

chcp 65001 & (cmd /c type "%~dpn0.cmd") & pause & goto :EOF

English:     texts, web pages and documents
Graves,etc:  à á â ã ä å æ ç è é ê ë ì í î ï
Greek:       ΐ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο
Arabic:      ڠ ڡ ڢ ڣ ڤ ڥ ڦ ڧ ڨ ک ڪ ګ ڬ ڭ ڮ گ
Full width:  @ A B C D E F G H I J K L M N O
Romanian:    texte, pagini Web şi a documentelor
Vietnamese:  văn bản, các trang web và các tài liệu
Russian:     тексты, веб-страницы и документы
Japanese:    テキスト、Webページや文書
Yiddish:     טעקסץ, וועב זייַטלעך און דאָקומענטן
Hindi:       पाठ, वेब पृष्ठों और दस्तावेज
Thai:        ข้อความ หน้า เว็บ และ เอกสาร
Korean:      텍스트, 웹 페이지 및 문서
Chinese:     文本,網頁和文件

我可以在ConEmu中正確地看到所有符號。 是的,測試腳本打開65001代碼頁。 我已經發現Vim根本無法使用65001代碼頁,所以這似乎不是一個選項。 終端中的默認代碼頁是437,我也可以使用此默認代碼頁在ConEmu中鍵入類似俄語的內容,並且顯示正確。

閱讀:h termencoding ,我看到Windows默認使用Unicode來傳遞符號。 然后,我不明白為什么當我在終端Vim中鍵入任何非ANSI時,我明白了? 符號? 航空公司也不會顯示來自修補的Consolas精美符號。 如何在Windows上為終端Vim配置真正的Unicode? 順便說一句, &termencoding報告也是437。

有人可以一勞永逸地向我解釋一下,對Windows上的終端Vim的Unicode支持(以及如何配置它)?

我自己也很想知道這一點,並且在過去嘗試過ConEmu並且在努力獲得256色的控制台vim和花哨的字體之后放棄了。

所以今天我又嘗試了一段時間,驚喜,驚喜 - 事情似乎有效。 考慮到對版本的所有極端敏感性,我將嘗試列出所有版本

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug  1 2014 09:38:34)
MS-Windows 32-bit console version
Included patches: 1-389
Compiled by raghuramanr@ADITI

ConEmu

140723 Alpha

Windows:贏得7x64

.vimrc中的ConEmu設置:

" ConEmu
if !empty($CONEMUBUILD)
    echom "Running in conemu"
    set termencoding=utf8
    set term=xterm
    set t_Co=256
    let &t_AB="\e[48;5;%dm"
    let &t_AF="\e[38;5;%dm"
    " termcap codes for cursor shape changes on entry and exit to
    " /from insert mode
    " doesn't work
    "let &t_ti="\e[1 q"
    "let &t_SI="\e[5 q"
    "let &t_EI="\e[1 q"
    "let &t_te="\e[0 q"
endif

腳步:

chcp 65001
vim.exe

我仍然無法在vim中獲得一個令人困惑的閃爍光標。 當事情變得混亂時,仍然比以前更好。

最近有一個針對“Windows 8 IME in console Vim”補丁 它被mattn清理並發布在這里: https ://gist.github.com/mattn/8312677

它包含在7.4.142中。 該版本是否可以解決您的問題?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM