Vim:Windows下的终端编码(Unicode)

我不知道为什么,但是这个话题似乎被记录在案,并且被争议所涵盖,因为没有人知道真正的答案(除了莫奥莱纳尔先生,也很少回答)。

所以基本上我提出了一个讨论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中得到一个闪烁的光标,这是令人困惑的。比以前更好的东西会被搞砸了。

相关文章

普通模式 >G 增加当前行到文档末尾处的缩紧层级 $ 移动到本行的末尾 . 相当于一个...
原文连接: https://spacevim.org/cn/layers/lang/elixir/ 模块简介 功能特性 启用模块 快捷键 语言专属...
原文连接: https://spacevim.org/cn/layers/lang/dart/ 模块简介 功能特性 依赖安装及启用模块 启用模...
 =   赋值操作符,可以用于算术和字符串赋值 +        加法计算     -        减法运算...
1.根据包名来查看指定的APP指定数据 adb shell "top | grep com.xxx.xxx" 由于这样打印出来的数...
ctrl+F 向下翻页 ctrl+B 向下翻页 u 取消最近一次操作 U 取消当前行的操作 ZZ 保存当前内容并退出 gg 跳...