Подтвердить что ты не робот

Vim: кодирование (Unicode) в терминале под Windows

Я не знаю почему, но эта тема, похоже, плохо документирована и покрыта спорами, поскольку никто не знает реального ответа (за исключением, может быть, г-на Муленара, который редко отвечает в любом случае).

Итак, в основном я поднял дискуссию здесь, и она быстро умерла, вероятно, потому, что есть не слишком много людей используют Vim в режиме терминала в Windows.

Мои настройки кодировки выглядят следующим образом:

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

Конечно, у меня нет проблем, работающих под GVim: можно вводить любые символы, а мой исправленный Consolas для Powerline работает отлично. Проблемы возникают, когда я пытаюсь запустить Vim в режиме терминала. Я использую ConEmu, многофункциональный эмулятор терминала для Windows. Он утверждает, что официально поддерживает Unicode из коробки. Например, я могу запустить следующий тест script:

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. Да, тест script включает кодовую страницу 65001. Я уже обнаружил, что Vim не может работать с кодовой страницей 65001 вообще, так что, похоже, это не вариант. Кодовая страница по умолчанию в терминале - 437, и я также могу ввести что-то вроде русского в ConEmu с этой кодовой страницей по умолчанию, и она отображается правильно.

Чтение через :h termencoding, я вижу, что Windows использует Unicode по умолчанию для передачи символов. Тогда я не понимаю, почему, когда я набираю что-то не ANSI в терминале Vim, я вижу ? символы? Авиакомпания не отображает причудливые символы из исправленного Consolas. Как настроить истинный Unicode для терминала Vim в Windows? Кстати, &termencoding сообщает 437.

Может кто-нибудь, раз и навсегда, пожалуйста, объясните мне, является ли поддержка Unicode для терминала Vim на Windows там (и как его настроить) или нет?

4b9b3361

Ответ 1

Я тоже об этом задумался, а в прошлом пробовал ConEmu и сдался, пытаясь получить консольный vim с 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 [email protected]

ConEmu

140723 Alpha

Windows: Win 7x64

Настройки ConEmu в .vimrc:

" 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, который запутан. Все еще лучше, чем раньше, когда материал будет испорчен.