在上一篇文章裏,我簡要介紹了 VSCode 插件開發的基本流程,同時講解了如何獲取文件夾絕對路徑和用戶輸入的方法。最近又開發了一個新的插件,主要用途是替換當前編輯文件的內容。google 了一圈,發現介紹這方面的文章不多,特此記錄一下,但願對有相似需求的人有一些幫助。javascript
需求很簡單,我須要將下面文件的內容: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
開始覺得 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')); })
其實這個需求實現起來仍是蠻簡單的,主要是要根據 VSCode 的特色將思路理順,再一步步實現。若是有更好的實現方式,請務必留言給我插件