vim - 如何在 VIM 中将 Windows 控制台输出转换为 utf8
问题描述
我想从 gvim 执行系统命令并在当前缓冲区中检索该命令的输出。所以我在 gvim 中运行以下命令:
:r echo éèà
然而,结果显示三个黑色方块而不是回显的字符。我还没有弄清楚该怎么做才能让它发挥作用。我有以下编码设置:
set encoding=utf8
set termencoding=cp850
我的 Windows 控制台编码是 cp850。
解决方案
TL;博士
:r! echo éèà | c:\cygwin\bin\iconv -f cp850 -t cp1252
假设
我已经能够使用 gvim 7.4 在我的 Windows 10 机器上重现您的问题,通过 gvim 的 Windows 安装程序安装。
我的机器上也有 cygwin,我有iconv
,它的完整路径是c:\gygwin\bin\iconv
.
建议的解决方案
显然,gvim 期望 Windows shell 的输出在 cp1252 中,因为这对我有用:
:r! echo éèà | c:\cygwin\bin\iconv -f cp850 -t cp1252
我检查了结果,Vim 在我的文档中正确插入了 éèà 的 utf-8 字符。
我没有iconv
Windows 原生的等价物,但如果你有 Cygwin,你可以添加c:\cygwin\bin
到你的 Windows 路径,并且该命令不需要显式路径。
结语
呸。这很丑陋。该解决方案至少在我的机器上有效,但我希望有人找到并发布更优雅的解决方案。
应该有一种方法可以告诉 gvim 期望从 shell 得到什么编码,但我没有找到它。我玩了 , 的各种设置组合encoding
,termencoding
而fileencoding
不是使用iconv
,但只设法得到不同的错误结果。
这些相关问题面临类似的问题,但他们的解决方案在我的测试中也不起作用:
- https://superuser.com/questions/682591/vim-uses-wrong-encoding-when-invoking-commands-in-the-terminal
- https://vi.stackexchange.com/questions/7105/wrong-encoding-while-calling-shell
问题源于cmd.exe
(Windows 上的 vim 中的默认值:set shell
)与 gvim 期望的字符编码不匹配。我不知道为什么改变:set termencoding
不能解决问题。
推荐阅读
- python - Pygame掩码在错误区域发生碰撞
- powerquery - 有没有办法在 Power Query 中用小计替换空值?
- python - 如何使用python bs4提取javascript变量
- r - tidyverse 是否提供基于 xts 范围的查询?
- github - 这个错误意味着我在 git 提交后得到了什么?
- css - 如何在 IntelliJ 中配置“回车键跳过”行为?
- r - 在 R -SVM 中,测试集中的预测变量少于训练集中的预测变量
- asp.net - BetterCms 路由
- java - Java 日历日期
- java - 通过 REST API 上传文本、图像和文件