∮我想要的∮
我想使用Vim的插件,我使用著名的插件管理器病原体(https://github.com/tpope/vim-pathogen)。
该插件是vim-ps1
(https://github.com/PProvost/vim-ps1),并为扩展名为*.ps1
的Windows Powershell文件提供语法着色。
我的配置
为了安装我的插件,我把它克隆到了bundle目录中。我在我的办公室电脑上运行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
时,没有任何React。下面是我的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
目录中加载了一些文件。
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
,字符显示会出现问题
现在,我从vimrc
文件中删除了set encoding=utf-8
行,打开了*.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
兼容?
编辑1
当我运行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
一起工作,但我不能解释这种行为。
4条答案
按热度按时间fdx2calv1#
看起来你运行的是Vim 8,所以你根本不需要Pathogen。只要把你的插件移到
~/vimfiles/pack/bundle/start
下就可以了。阅读:help packages
了解更多信息。此外,根据我的经验,在配置中将
set encoding=utf-8
设置为第一行(不计算注解)可以节省许多麻烦。ejk8hzay2#
我找到了一个解决方案:从一个不同于Windows Powershell的终端运行Vim。我使用的终端是Windows Git附带的终端(https://gitforwindows.org/)。正如@Matt提到的,它基于Mintty。
将Windows PowerShell的代码页从默认的850(latin-1)更改为65001(utf-8)没有任何效果。我不必使用Windows PowerShell,但另一种解决方案将对需要使用的人有所帮助。
cgvd09ve3#
解决方法是修改Windows中的一个参数以正确使用UTF-8。它位于“控制面板”〉“时钟和区域”〉“区域”下。在“管理”选项卡下,单击“更改系统区域设置..."。您需要有管理员权限才能执行此操作。
更改设置第1部分:
然后选中“Beta:使用Unicode UTF-8实现全球语言支持”(请参见下面的屏幕截图)。
更改设置第2部分:
我不知道这个参数到底改变了什么,其实在Stack Overflow上有一个关于它的问题:What does "Beta: Use Unicode UTF-8 for worldwide language support" actually do?。它还没有任何答案。
Microsoft论坛上的一个较早的主题未提供更多信息:https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/6f9f1695-9d64-43f3-8527-6b895599233a/use-unicode-utf8-for-worldwide-language-support
tvmytwxo4#
我也在为这个问题而挣扎(我的用户名&用户配置文件包含一个Unicode字母)。对我来说,以下操作有效: