vscode通过插件修改编辑器的内容

之前碰到一个需求是这样的:在vsocde编译器中检验用户输入的代码,如果出现中文字符,那么将其替换成相应的英文字符。
好了,进下来直接上代码:

1
2
3
4
5
6
7
8
const fs_1 = require("fs");
//读取文件内容,filePath为文件的路径,如:C:\aaa\bbb\ccc.cpp
var oldFileData = fs_1.readFileSync(filePath) + '';
//然后对齐进行替换
var newFileData = oldFileData.replace(/\’|\‘/g,"'").replace(/\“|\”/g,"\"").replace(/,/g,",").replace(/:/g,":")
.replace(/。/g,".").replace(/;/g,";").replace(/\【/g,"[").replace(/\】/g,"]").replace(/\{/g,"{").replace(/\}/g,"}");
//然后写入文件(此方法有问题)
//fs_1.writeFileSync(filePath, newFileData);

读取cpp文件也就是编辑器的代码,对其进行校验,替换字符,然后再将新的字符写入cpp文件,但是测试会出现问题,时常没法保存vscod编辑器的代码,经过反复测试我发现:
我将cpp文件的内容进行写入之后,磁盘的cpp文件的内容更换,但编辑器没有即时生效,如果这时保存的话会提示当前文件出现冲突,需要手动保存时无法保存,原因是编辑器没有即时生效,
所以我采取一种新的方法:就是不再新的内容写入cpp文件了,而是写入编辑器中,至此编辑器无冲突也可保存;
正确代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
const fs_1 = require("fs");
const vscode_1 = require("vscode");
//读取文件内容,filePath为文件的路径,如:C:\aaa\bbb\ccc.cpp
var oldFileData = fs_1.readFileSync(filePath) + '';
//然后对齐进行替换
var newFileData = oldFileData.replace(/\’|\‘/g,"'").replace(/\“|\”/g,"\"").replace(/,/g,",").replace(/:/g,":")
.replace(/。/g,".").replace(/;/g,";").replace(/\【/g,"[").replace(/\】/g,"]").replace(/\{/g,"{").replace(/\}/g,"}");
//核心代码
vscode_1.window.activeTextEditor.edit(editBuilder => {
// 从开始到结束,全量替换
const end = new vscode_1.Position(vscode_1.window.activeTextEditor.document.lineCount + 1, 0);
editBuilder.replace(new vscode_1.Range(new vscode_1.Position(0, 0), end), newFileData);
});

其实不管你的需求是什么,本文想要讲述的是这段核心代码,也就是通过这段代码将vscode编辑器的内容进行替换。

文章目录