VS Code插件开发介绍(二)

  • 1、前言

上一篇文章里,我简要介绍了 VSCode 插件开发的基本流程,同时讲解了如何获取文件夹绝对路径和用户输入的方法。最近又开发了一个新的插件,主要用途是替换当前编辑文件的内容。google 了一圈,发现介绍这方面的文章不多,特此记录一下,但愿对有相似需求的人有一些帮助。javascript

  • 2、需求

需求很简单,我须要将下面文件的内容:java

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#
};

替换为:segmentfault

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',
};

能够理解为一个简单的自动化编号工具。其中要解决的问题主要有下面三个:数组

  • 获取当前文件路径
  • 读取文件内容
  • 写文件内容

下面介绍如何实现。app

  • 3、实现

开始觉得 VSCode 有现成的 API 能够取到当前文件内容,但找了一圈搜不到,只能经过迂回的方式实现。工具

第一步,获取当前文件的路径:ui

const currentlyOpenTabfilePath = vscode.window.activeTextEditor.document.fileName;

第二步,读取文件内容,并拆分为数组google

const fs = require('fs');

const fileContentArr = fs.readFileSync(currentlyOpenTabfilePath, 'utf8').split(/\r?\n/);

第三步,写文件。因为无法逐行替换文件内容,只能现将原来的文件清空,再一行一行添加回去。spa

fs.truncateSync(currentlyOpenTabfilePath);

fileContentArr.forEach( (line, index) => {
    let content = line;
    if (line.slice(-1) == '#') {
        content = xxxxx;
    } 

    fs.appendFileSync(currentlyOpenTabfilePath, content + ((index == contentLength - 1) ? '' : '\n'));
})
  • 4、总结

其实这个需求实现起来仍是蛮简单的,主要是要根据 VSCode 的特色将思路理顺,再一步步实现。若是有更好的实现方式,请务必留言给我插件

相关文章
相关标签/搜索