Vim with Powershell我正在Windows上使用gvim。 在我的_vimrc中,我添加了:
如果执行此功能(:Test),则会看到无用的字符(非数字/字母ASCII字符)。 如果我使用cmd作为shell,它可以工作(不带-name),所以问题似乎出在从powershell到vim的输出中。 有趣的是,这很好用:
这样做:
更新:确认David 提到的行为 如果在_vimrc中执行上述设置命令,则:Test输出无意义。但是,如果直接在vim中而不是在_vimrc中执行它们,:Test将按预期工作。 此外,我尝试使用iconv来解决编码问题:
但这没什么区别。我可能使用了错误的编码类型。 有人知道怎么做吗? 有点黑,但是以下内容在Vim 7.2中有效。注意,我正在CMD会话中运行Powershell。
经过以下测试...
我遇到了许多人在这里描述的类似问题。 具体来说,调用
手动从vim内执行将使powershell正常工作,但是只要我添加:
到我的vimrc文件,我将收到错误"无法打开临时文件...。" 问题在于,默认情况下,在修改shell时,vim会自动将shellxquote设置为",这意味着shell命令将如下所示:
此命令需要如下所示,以便vim读取临时文件:
在我的vimrc文件中将shellquote设置为"并取消设置shellxquote(即将其设置为空白)似乎可以解决我的所有问题:
我还尝试了进一步的工作,并使用system()调用对vim进行了脚本化: 中具有powershell的system() 我怀疑问题是Powershell为.NET使用了本机String编码,它是UTF-16加上字节顺序标记。 当在命令之间传递对象时,这不是问题。不过,这是外部程序的总PITA。 您可以通过输出文件通过管道传输输出,该文件确实支持更改编码,但是默认情况下仍格式化其所在终端的输出(arrgh!),因此类似" Get-Process ""将以椭圆形等截断。您可以指定Out-File使用的虚拟终端的宽度。 不确定此信息有多有用,但确实可以更清楚地说明问题。 尝试替换
与
编辑:尝试使用cmd.exe作为外壳,并将" powershell.exe "放在"-command " 之前 当我将其放入vimrc中时,初始示例代码对我来说工作正常。 所以现在我想弄清楚vimrc中的功能是什么。可能:
编辑:是的,看来可以做到。这些天,您可能还是想让VIM默认使用unicode进行编码... 有趣的问题-这里还有一些其他问题。如果不对我的.vimrc文件进行任何更改,则如果我随后在gvim中运行以下命令:
它的行为符合预期! 如果我对.vimrc文件进行了相同的更改(shell和shellcmdflag选项),则运行:echo system(" dir -name ")将返回无意义的字符! n n n n 试试看 说明: Vim使用tempname()生成system()读取的临时文件路径。 如果 我提出了一种骇人听闻的解决方案。它并不能真正解决问题,但是可以通过某种方式完成工作。 此Vim插件可自动创建临时脚本文件,通过cmd.exe进行powershell调用并粘贴结果。它不如vim正确处理powershell很好,但是它可以工作。 我不使用VIM,但Powershell的默认输出是Unicode。记事本可以读取unicode,您可以使用它来查看是否获得期望的输出。 |