有什么方法可以在我的扩展代码中获取当前文档编码(位于底部栏中)?
就像是vscode.window.activeTextEditor.encoding
这似乎不可能。
由于几乎不可能证明是否定的,因此本答案的其余部分记录了我的探索内容。
字符串“encoding”不会出现(在这个意义上)在API docs https://code.visualstudio.com/api/references/vscode-api也不在索引.d.ts https://github.com/Microsoft/vscode/blob/master/src/vs/vscode.d.ts它源自的文件。 (使用 VSCode 1.37.1,截至撰写本文时为最新版本。)
我深入研究了vscode 来源 https://github.com/microsoft/vscode看看是否有一个聪明的解决方案,但一无所获。当用户更改编码时执行的代码位于editorStatus.ts https://github.com/microsoft/vscode/blob/master/src/vs/workbench/browser/parts/editor/editorStatus.ts,类 ChangeEncodingAction。这使得它的方式文本文件编辑器模型.ts https://github.com/microsoft/vscode/blob/master/src/vs/workbench/services/textfile/common/textFileEditorModel.ts,函数updatePreferredEncoding,设置preferredEncoding。该字段控制保存文件时发生的情况,并用于填充状态指示器,但不会去我能找到的其他任何地方。
读取状态指示器本身似乎是不可能的,因为 API 允许扩展使用以下命令创建新指示器window.createStatusBarItem https://code.visualstudio.com/api/references/vscode-api#window但不列举现有的。并且直接无法访问 DOM https://code.visualstudio.com/api.
我也空搜索了VSCode 问题 https://github.com/microsoft/vscode/issues与编码相关,包括开放式和封闭式,但仅浏览了最近的约 100 个封闭式问题标题。
备择方案
我此时的主要建议是在 VSCode github 上提交增强请求。
也应该可以做一些事情反射 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect但当然它会很脆弱。
最后,编码控制内存中的文档(字符序列)如何映射到磁盘上的文件(字节序列)。根据您尝试执行的操作,可能会以多种编码方式对文档进行推测性编码,并将每种编码与磁盘上的内容进行比较(只要文件不脏)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)