希望对你而言,回答这一点很简单。
我在Win7上有gvim和vim。每当我将命令结果重定向到文件并用Vim(或Gvim,同样的效果)打开它时,我在每个字符之间插入二进制0(^ @符号)。
所以,而不是
r96130
我有
^@r^@9^@6^@1^@3^@0^@
任何想法如何(首选)防止它或(罚款)摆脱它?
我试过替换,但显然这不仅仅是^ @,它是二进制零(我认为)所以它不会在/^@
上找到。
编辑:
1)尝试将设置编码设置为UTF-8(我正在处理的内容的编码)和UTF-16(每个 @Philippe Wendler 的答案,谢谢),但无济于事。< / p>
2) __ PowerShell__是有罪的一方。当我在通常的命令行(通过cmd
)进行重定向时,没有副作用。只有在PowerShell会话上创建的文件才会插入这些二进制零。
3) @Christian 提到的Powershell好东西没有帮助。因为我已经将Ubuntu作为我的主要操作系统切换到Ubuntu并在那里使用Vim,所以我将留下未回答的问题,所以这里唯一的“解决方案”现在不使用PowerShell + Vim,这显然缺乏答案。 : - )
感谢@ Emperor XLII 提供解决方案!在评论中发布此处可能不够明显:
dir | OutFile -Encoding UTF8 test
创建一个出现在Vim中但没有二进制零的文件。如果我使用Encoding运行到OEM,ASCII和我测试的其他两个,也会发生同样的情况。
一个有希望的提示在于:he 'fileencodings'
- 是的,复数,由@ Dan Fitch ,但我还没有测试过,因为那时我已经离开了Win7。
答案 0 :(得分:4)
Windows在内部使用UTF-16作为Unicode编码,此文件看起来也使用UTF-16,但vim使用8位字符集(可能是latin1)解释它。
在vim中尝试:set encoding=utf-16
以选择正确的编码。
答案 1 :(得分:3)
我有同样的问题。使用cmd
shell(或Console2)并运行如下命令:
prompt> myBatFile.bat > myOutputFile.log
我会得到一堆^@
个符号,我可以摆脱使用只运行以下命令的宏:
:s/\r\(\n\)/\1/g
这对我来说是可以接受的,但令人讨厌(我相信它是具有不同的unix与Dos风格的回车并且在文件末尾没有行尾的组合)。更糟糕的是,一旦我搬到Windows 7,我就开始使用PowerShell。一旦发生这种情况,我不仅获得了^@
个符号,而且还有^M
和ÿþ
一起在文件的开头(我认为这是gVIM无法正确解释的字节顺序标记)。
无论如何,我改变了调用我的bat文件的方式,以便它遵循PowerShell的重定向方式,现在在gVIM中读取文件没有问题:
prompt> myBatFile.bat | Out-File myOutputFile.log -encoding UTF8
希望有所帮助。
答案 2 :(得分:1)
在powershell中尝试使用
重定向文件set-content c:\file.txt -encoding Unicode # or BigEndianUnicode
您也可以以相同的方式使用out-file
答案 3 :(得分:1)
你不应该对Powershell的输出做任何特别的事情。您可以更改您的vim配置,以便它可以处理正确的编码。
查看:he fileencodings
(注意尾随s) - 此设置可让您选择vim将尝试的编码。默认情况下,Vim 7.x将使用ucs-bom
并尝试解码字节顺序标记,但您的vimrc
可能正在设置不同的列表;确保它不是以latin1
之类的东西开头的。默认情况下,在我的x64 Windows 7计算机上,通过vim读取管道输出到文件的Powershell命令就好了。
将fileencodings
设置为ucs-bom
或utf-16
可以解决您的问题。