Что я хочу
Я хочу использовать плагин для 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
, но я не могу объяснить это поведение.