我想从gvim执行系统命令,并在当前缓冲区中检索该命令的输出。所以我在gvim中运行以下命令:
:r echo éèà
但是结果显示三个黑色正方形而不是回显的字符。我还没有弄清楚该怎么做才能工作。我有以下编码设置:
set encoding=utf8
set termencoding=cp850
我的Windows控制台编码为cp850。
答案 0 :(得分:0)
TL; DR
:r! echo éèà | c:\cygwin\bin\iconv -f cp850 -t cp1252
假设
我已经能够使用通过gvim的Windows安装程序安装的gvim 7.4在Windows 10计算机上重现您的问题。
我的机器上还有cygwin,其中有iconv
,其完整路径为c:\gygwin\bin\iconv
。
建议的解决方案
显然,gvim希望Windows Shell的输出在cp1252中,因为这对我有用:
:r! echo éèà | c:\cygwin\bin\iconv -f cp850 -t cp1252
我检查了结果,Vim正确地在文档中插入了éèà的utf-8字符。
我没有等效于Windows本机的iconv
,但是如果您有Cygwin,则可以将c:\cygwin\bin
添加到Windows路径,并且该命令不需要显式路径。>
结语
好这很丑。该解决方案至少在我的机器上有效,但是我希望有人能找到并发布一种更优雅的解决方案。
应该有一种方法告诉gvim从shell期望什么编码,但是我没有找到它。我使用encoding
,termencoding
和fileencoding
的各种设置组合进行游戏,而不是使用iconv
,但只能设法获得不同的错误结果。
这些相关的问题也遇到了类似的问题,但是它们的解决方案在我的测试中也不起作用:
问题源于cmd.exe
(Windows上vim中的默认:set shell
)与gvim期望的字符编码不匹配。我不知道为什么更改:set termencoding
不能解决问题。