首页 > 解决方案 > VSCode:activeTextEditor 编码

问题描述

有没有办法在我的扩展代码中获取当前文档编码(在底部栏中)?

就像是vscode.window.activeTextEditor.encoding

标签: visual-studio-codevscode-extensions

解决方案


这似乎是不可能的。

由于几乎不可能证明是否定的,这个答案的其余部分记录了我探索的内容。

字符串“encoding”没有出现(在这个意义上)API 文档中的任何地方,也没有出现在它派生的index.d.ts文件中。(使用 VSCode 1.37.1,截至撰写时为当前版本。)

我挖掘了vscode 源代码,看看是否有一个聪明的解决方案,但结果是空的。用户更改编码时执行的代码位于editorStatus.ts的 ChangeEncodingAction 类中。这进入了textFileEditorModel.ts函数 updatePreferredEncoding,它设置了preferredEncoding。该字段控制保存文件时发生的情况,并用于填充状态指示器,但不会出现在我能找到的任何其他地方。

读取状态指示器本身似乎是不可能的,因为 API 允许扩展使用window.createStatusBarItem创建新指示器,但不能枚举现有指示器。并且直接访问 DOM 是不可能的

我还通过与编码相关的VSCode 问题进行了空搜索,包括开放式和封闭式,但只浏览了最近的约 100 个封闭式问题标题。

备择方案

在这一点上,我的主要建议是在 VSCode github 上提交增强请求。

也应该可以通过反射来做一些事情,但当然它会很脆弱。

最后,编码控制内存中的文档(字符序列)如何映射到磁盘上的文件(字节序列)。根据您要执行的操作,它可能会以多种编码推测性地对文档进行编码,并将每种编码与磁盘上的内容进行比较(只要文件不脏)。


推荐阅读