一、前言
在上一篇文章里,我简要介绍了 VSCode 插件开发的基本流程,同时讲解了如何获取文件夹绝对路径和用户输入的方法。最近又开发了一个新的插件,主要用途是替换当前编辑文件的内容。google 了一圈,发现介绍这方面的文章很少,特此记录一下,希望对有类似需求的人有一些帮助。
二、需求
需求很简单,我需要将下面文件的内容:
export default {
add_member#
manage_member_card#
member_setting#
search_member#
edit_member#
delete_member#
assign_consultant#
add_member_tag#
import_member#
modify_member_point#
};
替换为:
export default {
add_member: 'ce0',
manage_member_card: 'ce1',
member_setting: 'ce2',
search_member: 'ce3',
edit_member: 'ce4',
delete_member: 'ce5',
assign_consultant: 'ce6',
add_member_tag: 'ce7',
import_member: 'ce8',
modify_member_point: 'ce9',
};
可以理解为一个简单的自动化编号工具。其中要解决的问题主要有下面三个:
- 获取当前文件路径
- 读取文件内容
- 写文件内容
下面介绍如何实现。
三、实现
开始以为 VSCode 有现成的 API 可以取到当前文件内容,但找了一圈搜不到,只能通过迂回的方式实现。
第一步,获取当前文件的路径:
const currentlyOpenTabfilePath = vscode.window.activeTextEditor.document.fileName;
第二步,读取文件内容,并拆分为数组
const fs = require('fs');
const fileContentArr = fs.readFileSync(currentlyOpenTabfilePath, 'utf8').split(/\r?\n/);
第三步,写文件。由于没法逐行替换文件内容,只能现将原来的文件清空,再一行一行添加回去。
fs.truncateSync(currentlyOpenTabfilePath);
fileContentArr.forEach( (line, index) => {
let content = line;
if (line.slice(-1) == '#') {
content = xxxxx;
}
fs.appendFileSync(currentlyOpenTabfilePath, content + ((index == contentLength - 1) ? '' : '\n'));
})
四、总结
其实这个需求实现起来还是蛮简单的,主要是要根据 VSCode 的特点将思路理顺,再一步步实现。如果有更好的实现方式,请务必留言给我
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。