如何在Windows PowerShell中运行的Vim中使插件与`set encoding = utf-8`配合使用?

时间:2019-05-28 14:08:49

标签: powershell vim encoding

我想要的

我想为Vim使用该插件,并且为此使用著名的插件管理器病原体(https://github.com/tpope/vim-pathogen)。

该插件为vim-ps1https://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被添加到其中,只是为了确保我的问题不是来自该插件(我假设{{ 1}})。

nerdtree文件由vimrc文件加载,因为我要对设置进行版本控制。有关更多信息,请点击https://stackoverflow.com/a/18203545/7964523

_vimrc

问题

使用 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,语法着色功能起作用了! Nerdtree也起作用。

但是我现在在显示某些字符时遇到麻烦,例如字符代码*.sp1(已通过vim命令ac检查)在utf-8和{{ 1}}在latin-1中。

ga的输出提供了更多行,包括与语法插件相关的行(请参见46、47、48):

¬

¼的输出不变

我试图克服的问题

我设法确定触发器(见上文)。

我移动了: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: ~\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?一起使用?

Edit1

在运行Vim 8.1时,我应用了@Matt建议的解决方案。问题仍然存在,但与病原体无关。

添加set encoding=utf-8并没有改变。

我从终端机E117: Unknown function: pathogen#infect E15: Invalid expression: pathogen#infect("~/vimfiles/bundle/{}") 跑来,分析了输出文件set encoding=utf-8。我的用户名包含以十六进制unicode编码的set fileencodings=utf-8,default字母,vim -Vdebug,并且在调试文件中的某个时刻,我已经得到

debug

请参阅é部分。它是四个单独的字符e9 Searching for "C:\Users\Aur<e9>lien/vimfiles/pack/*/start/*" <e9><(我可以将光标放在每个字符上)。

在没有e9的情况下,调试文件的输出是正确的(斜杠和反斜杠除外,但可以):

>

这说明了为什么它不适用于set fileencodings=utf-8,default,但是我无法解释这种行为。

我找到了一个解决方案::从Windows Powershell之外的其他终端运行Vim。我用于此的终端是Git for Windows(https://gitforwindows.org/)附带的终端。

将Windows PowerShell的代码页从默认的850(latin-1)更改为65001(utf-8)无效。我不必使用Windows PowerShell,但是一种解决方案可能会帮助需要的人。我更新了问题。

3 个答案:

答案 0 :(得分:0)

好像您正在运行Vim 8,因此根本不需要Pathogen。只需将您的插件移到~/vimfiles/pack/bundle/start下就可以了。阅读:help packages了解更多信息。

此外,根据我的经验,在配置中将set encoding=utf-8设置为第一行(不计算注释)可以省去很多麻烦。

答案 1 :(得分:0)

我找到了一个解决方案:从不同于Windows Powershell的终端运行Vim。我用于此的终端是Git for Windows(https://gitforwindows.org/)附带的终端。正如@Matt所说,它基于薄荷味。

将Windows PowerShell的代码页从默认的850(latin-1)更改为65001(utf-8)无效。我不必使用Windows PowerShell,但是另一种解决方案将对需要的人有所帮助。

答案 2 :(得分:0)

解决方案是在Windows中修改参数,以便正确使用UTF-8。在“控制面板”>“时钟和区域”>“区域”下。在“管理”选项卡下,单击“更改系统区域设置...”。您需要具有管理员权限。

更改设置第1部分:
Change setting part 1

然后选中“测试版:使用Unicode UTF-8进行全球语言支持”之前的框(请参见下面的屏幕截图)。

更改设置第2部分:
Change setting part 2

我不清楚该参数会发生什么变化。关于堆栈溢出,实际上存在一个问题: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