我不知道为什么,但是这个话题似乎被记录在案,并且被争议所涵盖,因为没有人知道真正的答案(除了莫奥莱纳尔先生,也很少回答)。
所以基本上我提出了一个讨论here,它很快死了,可能是因为没有太多的人在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 - 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:Win 7×64
.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中得到一个闪烁的光标,这是令人困惑的。比以前更好的东西会被搞砸了。