Как заставить мои плагины работать с `set encoding = utf-8` в Vim, запущенном из Windows PowerShell? - PullRequest
0 голосов
/ 28 мая 2019

Что я хочу

Я хочу использовать плагин для Vim, и для этого я использую известный патоген менеджера плагинов (https://github.com/tpope/vim-pathogen).

Плагин vim-ps1 (https://github.com/PProvost/vim-ps1)), обеспечивающий окрашивание синтаксиса для файлов Windows Powershell с расширением *.ps1.

Мой конфиг

Чтобы установить мой плагин, я просто клонировал его в каталог с комплектом. Я нахожусь на моем офисном компьютере под управлением Windows, поэтому мой каталог vimfiles (вместо версии .vim linux) выглядит так:

    vimfiles
     ├── autoload
     │    └── pathogen.vim
     ├── bundle
     │    ├── nerdtree
     │    └── vim-ps1
     ├── spell
     ├── template
     └── vimrc

Итак, есть два плагина, vim-ps1, которые я хочу установить, и nerdtree, добавленные туда только для того, чтобы убедиться, что мои проблемы не из плагина (я сделал предположение, что с nerdtree есть особая проблема) .

Файл vimrc загружается файлом _vimrc, потому что я хочу изменить свои настройки. Подробнее об этом здесь https://stackoverflow.com/a/18203545/7964523

    runtime vimrc

проблема

С set encoding=utf-8 я не могу использовать плагины

Когда я открываю *.sp1, ничего не происходит. Вот содержимое моего vimrc файла для отладки:

    runtime! debian.vim
    set nocompatible

    execute pathogen#infect("~/vimfiles/bundle/{}")
    syntax on
    filetype plugin indent on

    set encoding=utf-8

Выход :scriptnames равен

      1: ~\_vimrc
      2: ~\vimfiles\vimrc
      3: ~\vimfiles\autoload\pathogen.vim
      4: C:\Program Files (x86)\Vim\vim81\syntax\syntax.vim
      5: C:\Program Files (x86)\Vim\vim81\syntax\synload.vim
      6: C:\Program Files (x86)\Vim\vim81\syntax\syncolor.vim
      7: C:\Program Files (x86)\Vim\vim81\filetype.vim
      8: ~\vimfiles\bundle\vim-ps1\ftdetect\ps1.vim
      9: ~\vimfiles\bundle\vim-ps1\ftdetect\ps1xml.vim
     10: ~\vimfiles\bundle\vim-ps1\ftdetect\xml.vim
     11: C:\Program Files (x86)\Vim\vim81\ftplugin.vim
     12: C:\Program Files (x86)\Vim\vim81\indent.vim
     13: C:\Program Files (x86)\Vim\vim81\plugin\getscriptPlugin.vim
     14: C:\Program Files (x86)\Vim\vim81\plugin\gzip.vim
     15: C:\Program Files (x86)\Vim\vim81\plugin\logiPat.vim
     16: C:\Program Files (x86)\Vim\vim81\plugin\manpager.vim
     17: C:\Program Files (x86)\Vim\vim81\plugin\matchparen.vim
     18: C:\Program Files (x86)\Vim\vim81\plugin\netrwPlugin.vim
     19: C:\Program Files (x86)\Vim\vim81\plugin\rrhelper.vim
     20: C:\Program Files (x86)\Vim\vim81\plugin\spellfile.vim
     21: C:\Program Files (x86)\Vim\vim81\plugin\tarPlugin.vim
     22: C:\Program Files (x86)\Vim\vim81\plugin\tohtml.vim
     23: C:\Program Files (x86)\Vim\vim81\plugin\vimballPlugin.vim
     24: C:\Program Files (x86)\Vim\vim81\plugin\zipPlugin.vim
     25: C:\Program Files (x86)\Vim\vim81\scripts.vim
     26: C:\Program Files (x86)\Vim\vim81\syntax\vim.vim
     27: C:\Program Files (x86)\Vim\vim81\ftplugin\vim.vim
     28: C:\Program Files (x86)\Vim\vim81\indent\vim.vim

Вы видите, что загружены некоторые файлы из каталога vim-ps1. Выход ":set runtimepath? равен

    runtimepath=
    ~\vimfiles\bundle\nerdtree,
    ~\vimfiles\bundle\vim-ps1,
    ~/vimfiles,
    C:\Program Files (x86)\Vim/vimfiles,
    C:\Program Files (x86)\Vim\vim81,
    C:\Program Files (x86)\Vim/vimfiles/after,
    ~/vimfiles/after

Вы также можете видеть, что папки nerdtree и vim-sp1 есть, но ни одна из них не работает.

Без set encoding=utf-8 возникают проблемы с отображением символов

Теперь я удаляю строку set encoding=utf-8 из моего vimrc файла. Я открываю *.sp1, и функция раскраски синтаксиса работает! Nerdtree тоже работает.

Но теперь у меня проблемы с отображением некоторых символов, таких как код символа ac (проверяется командой vim ga), интерпретируемый как ¬ в utf-8 и ¼ в latin-1.

Вывод :scriptnames предоставляет больше строк, в том числе связанных с плагином синтаксиса (см. 46, 47, 48):

      1: ~\_vimrc
      2: ~\vimfiles\vimrc
      3: ~\vimfiles\autoload\pathogen.vim
      4: C:\Program Files (x86)\Vim\vim81\syntax\syntax.vim
      5: C:\Program Files (x86)\Vim\vim81\syntax\synload.vim
      6: C:\Program Files (x86)\Vim\vim81\syntax\syncolor.vim
      7: C:\Program Files (x86)\Vim\vim81\filetype.vim
      8: ~\vimfiles\bundle\vim-ps1\ftdetect\ps1.vim
      9: ~\vimfiles\bundle\vim-ps1\ftdetect\ps1xml.vim
     10: ~\vimfiles\bundle\vim-ps1\ftdetect\xml.vim
     11: C:\Program Files (x86)\Vim\vim81\ftplugin.vim
     12: C:\Program Files (x86)\Vim\vim81\indent.vim
     13: ~\vimfiles\bundle\nerdtree\plugin\NERD_tree.vim
     14: ~\vimfiles\bundle\nerdtree\autoload\nerdtree.vim
     15: ~\vimfiles\bundle\nerdtree\lib\nerdtree\path.vim
     16: ~\vimfiles\bundle\nerdtree\lib\nerdtree\menu_controller.vim
     17: ~\vimfiles\bundle\nerdtree\lib\nerdtree\menu_item.vim
     18: ~\vimfiles\bundle\nerdtree\lib\nerdtree\key_map.vim
     19: ~\vimfiles\bundle\nerdtree\lib\nerdtree\bookmark.vim
     20: ~\vimfiles\bundle\nerdtree\lib\nerdtree\tree_file_node.vim
     21: ~\vimfiles\bundle\nerdtree\lib\nerdtree\tree_dir_node.vim
     22: ~\vimfiles\bundle\nerdtree\lib\nerdtree\opener.vim
     23: ~\vimfiles\bundle\nerdtree\lib\nerdtree\creator.vim
     24: ~\vimfiles\bundle\nerdtree\lib\nerdtree\flag_set.vim
     25: ~\vimfiles\bundle\nerdtree\lib\nerdtree\nerdtree.vim
     26: ~\vimfiles\bundle\nerdtree\lib\nerdtree\ui.vim
     27: ~\vimfiles\bundle\nerdtree\lib\nerdtree\event.vim
     28: ~\vimfiles\bundle\nerdtree\lib\nerdtree\notifier.vim
     29: ~\vimfiles\bundle\nerdtree\autoload\nerdtree\ui_glue.vim
     30: ~\vimfiles\bundle\nerdtree\nerdtree_plugin\exec_menuitem.vim
     31: ~\vimfiles\bundle\nerdtree\nerdtree_plugin\fs_menu.vim
     32: ~\vimfiles\bundle\nerdtree\nerdtree_plugin\vcs.vim
     33: C:\Program Files (x86)\Vim\vim81\plugin\getscriptPlugin.vim
     34: C:\Program Files (x86)\Vim\vim81\plugin\gzip.vim
     35: C:\Program Files (x86)\Vim\vim81\plugin\logiPat.vim
     36: C:\Program Files (x86)\Vim\vim81\plugin\manpager.vim
     37: C:\Program Files (x86)\Vim\vim81\plugin\matchparen.vim
     38: C:\Program Files (x86)\Vim\vim81\plugin\netrwPlugin.vim
     39: C:\Program Files (x86)\Vim\vim81\plugin\rrhelper.vim
     40: C:\Program Files (x86)\Vim\vim81\plugin\spellfile.vim
     41: C:\Program Files (x86)\Vim\vim81\plugin\tarPlugin.vim
     42: C:\Program Files (x86)\Vim\vim81\plugin\tohtml.vim
     43: C:\Program Files (x86)\Vim\vim81\plugin\vimballPlugin.vim
     44: C:\Program Files (x86)\Vim\vim81\plugin\zipPlugin.vim
     45: C:\Program Files (x86)\Vim\vim81\scripts.vim
     46: ~\vimfiles\bundle\vim-ps1\syntax\ps1.vim
     47: ~\vimfiles\bundle\vim-ps1\ftplugin\ps1.vim
     48: ~\vimfiles\bundle\vim-ps1\indent\ps1.vim

Без изменений на выходе :set runtimepath?

Что я пытаюсь преодолеть это

Мне удается определить триггер (см. Выше).

Я переместил линию set encoding=utf-8

  • проблема остается неизменной независимо от ее положения после строки, которая выполняет патоген

  • выше строки, выполняющей возбудителя, я получил эту ошибку:

    E117: Unknown function: pathogen#infect
    E15: Invalid expression: pathogen#infect("~/vimfiles/bundle/{}")
    

так что худшее.

Как мне заставить мои плагины работать с set encoding=utf-8?

Edit1

Поскольку я работаю с Vim 8.1, я применил решение, предложенное @Matt. Проблема все еще здесь, но не связана с патогеном.

Добавление set fileencodings=utf-8,default ничего не изменило.

Я запустил свой терминал vim -Vdebug и проанализировал выходной файл debug. Мое имя пользователя содержит букву é в кодировке e9 в шестнадцатеричном Unicode, и в какой-то момент в файле отладки я получил

    Searching for "C:\Users\Aur<e9>lien/vimfiles/pack/*/start/*"

См. <e9> часть. Это четыре отдельных символа <, e, 9 и > (я могу навести курсор на каждый из них).

Без set fileencodings=utf-8,default и set encoding=utf-8 вывод файла отладки корректен (кроме слэша и обратной косой черты, но он работает):

    Searching for "C:\Users\Aurélien/vimfiles/pack/*/start/*"

Это объясняет, почему он не работает с set encoding=utf-8, но я не могу объяснить это поведение.

Ответы [ 3 ]

0 голосов
/ 02 июня 2019

Я нашел решение : запуск Vim с другого терминала, чем Windows Powershell.Терминал, который я использовал для этого, - тот, который поставляется с Git для Windows (https://gitforwindows.org/). Как уже упоминалось @Matt, он основан на mintty.

Изменение кодовой страницы Windows PowerShell по умолчанию 850(от латиницы-1) до 65001 (utf-8) не дает никакого эффекта. Мне не нужно использовать Windows PowerShell, но другое решение было бы полезно для людей, которым это необходимо.

0 голосов
/ 03 июня 2019

Решение состоит в том, чтобы изменить параметр в Windows, чтобы правильно использовать UTF-8.Он находится в разделе «Панель управления»> «Часы и регион»> «Регион».На вкладке «Административный» нажмите «Изменить языковой стандарт системы ...».Для этого вам необходимо иметь права администратора.

Изменить часть настройки 1:
Change setting part 1

Затем установите флажок перед "Бета: использовать Unicode UTF-8 для всемирной языковой поддержки "(см. Скриншот ниже).

Изменить часть настройки 2:
Change setting part 2

Я не знаю точно, что этоизменения параметров.На самом деле есть вопрос об переполнении стека: Что на самом деле делает "Бета: использовать Unicode UTF-8 для поддержки языковых возможностей по всему миру"? .У него пока нет ответов.

Более старая тема на форуме Microsoft не предоставляет дополнительной информации: https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/6f9f1695-9d64-43f3-8527-6b895599233a/use-unicode-utf8-for-worldwide-language-support

0 голосов
/ 28 мая 2019

Похоже, вы работаете с Vim 8, так что вам вообще не нужен Pathogen.Просто переместите свои плагины под ~/vimfiles/pack/bundle/start и все готово.Прочитайте :help packages для получения дополнительной информации.

Кроме того, в моем опыте установка set encoding=utf-8 как самой первой строки (не считая комментариев) в вашей конфигурации избавляет от многих проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...