我尝试写一个扩展,当使用encloseTag命令调用时,显示从文本文件加载的预设标签列表,并将选定的文本封装在该标签中。我让它工作,但只有当我指定一个静态路径-使用相对路径不工作,我得到这些错误代替:
Error reading tags file: ENOENT: no such file or directory, open 'tags.txt'
Activating extension 'undefined_publisher.enclosingtags' failed: ENOENT: no such file or directory, open 'c:\Users\username\ProjectPublisher\out\FILENAME'.
当我尝试打印工作目录时,它不在项目目录附近(它在AppData中,而不是User文件夹中的项目位置)。我不确定我如何影响这一点,也不确定这是VSC的问题还是我的代码的问题。**注意:**我正在使用VSC调试(按F5)执行它。
我怎样才能让这段代码使用与扩展名. ts文件相同目录中的tags文件?package.json
:
(…)
"contributes": {
"commands": [
{
"command": "encloseTag",
"title": "Enclose in Tag"
}
]
},
(…)
extension.ts:
import * as vscode from 'vscode';
import * as fs from 'fs';
export function activate(context: vscode.ExtensionContext) {
let disposable = vscode.commands.registerCommand('encloseTag', () => {
let editor = vscode.window.activeTextEditor;
if (!editor) {
vscode.window.showErrorMessage('No active text editor');
return;
}
let selection = editor.selection;
let text = editor.document.getText(selection);
if (!text) {
return;
}
let tags: string[] = [];
try {
let data = fs.readFileSync('C:\\Users\\username\\ProjectPublisher\\tags.txt', 'utf8');
// Split the data into lines and remove leading and trailing whitespace and newline characters from each line
tags = data.split('\n').map(line => line.trim().replace(/\r?\n|\r/g, ''));
} catch (error: any) {
vscode.window.showErrorMessage('Error reading tags file: ' + error.message);
return;
}
// Prompt the user to select a tag
vscode.window.showQuickPick(tags).then((tag) => {
if (!tag) {
return;
}
// Enclose the selected text in the chosen tag
let newText = `<${tag}>${text}</${tag}>`;
editor.edit(edit => {
edit.replace(selection, newText);
});
});
});
context.subscriptions.push(disposable);
const fs = require('fs');
fs.readFileSync(`${__dirname}\\FILENAME`);
}
export function deactivate() {}
tags.txt
:
tag1
tag2
tag3
input:这是一些要注解的文本。
output:这是一些要注解的文本。
1条答案
按热度按时间slwdgvem1#
使用上下文中的文件路径构造绝对路径(activate函数的参数)
包含扩展名的目录的绝对文件路径