gpt4 book ai didi

visual-studio-code - VS Code 的扩展以启动 EXE 并插入从 EXE 返回的文本

转载 作者:行者123 更新时间:2023-12-05 04:00:44 25 4
gpt4 key购买 nike

我们有一个用于 Eclipse 的插件/扩展(VB.NET 形式的 exe 应用程序),但现在也想将它用于 Visual Studio Code。简单地说,exe 组成了一些代码行(文本)以插入到光标处。

所以我必须:

  1. 从 VS Code(通过键绑定(bind)或菜单)启动 VB.NET exe
  2. 以某种方式将文本从 exe 获取到 VS Code
  3. 在当前光标位置插入文本

有人知道怎么做吗? ... 并且可能有一个正在运行的例子?

编辑:这就是我所拥有的,并且可以正常工作......唯一的问题是启动 VB.NET 可执行文件:

// Get the active text editor
let editor = vscode.window.activeTextEditor;

if (editor) {
let selection = editor.selection;
// start VB.NET exe here ... but how ?
// insert a text at current position
editor.edit(editBuilder => {
editBuilder.insert(selection.start, 'text inserted');
});
}

最佳答案

已经有一段时间了,但由于我一直在为同样的问题而苦苦挣扎,现在我已经弄明白了,所以我认为留下答案会很好。我还假设您的问题不是文本编辑器本身,而是如何从 exe 中获取文本。

我这样做的方法是创建一个控制台应用程序,将结果序列化为 JSON,然后将其输出到控制台,然后从 vsc 扩展端,我从进程中读取缓冲区并将其解析回对象我可以用。

我的应用:

class Program
{
public class TMSCheckResult
{
public bool ValidationSucceeded { get; set; }
public string ResultMessage { get; set; }
public int ErrorColumn { get; set; }
public int ErrorRow { get; set; }
}

static void Main(string[] args)
{
var result = new TMSChecker().Validate(args[0], args[1]);
var serializedResult = JsonConvert.SerializeObject(result);
Console.WriteLine(serializedResult);
}
}

我的扩展:

import * as child from 'child_process';

interface TMSCheckResult {
ValidationSucceeded: boolean;
ResultMessage: string;
ErrorColumn: number;
ErrorRow: number;
}

export class TMSChecker {
runValidation() {
const res = child.execFileSync('myapppath.exe', ['arg0', 'arg1']);
let result: TMSCheckResult = JSON.parse(res.toString());
if (!result.ValidationSucceeded) {
vscode.window.showErrorMessage(result.ResultMessage);
//... work on the texteditor to show where the error is
}
else {
vscode.window.showInformationMessage('Syntax is correct.');
}
}
}

PS 1:您的 exe 必须始终以 0 退出 - 只需将 Main 保留为 void - 否则您将在扩展侧。

PS 2:如果您的结果文本太大,您可能希望将结果写入一个文件,然后在您的扩展程序上读取该文件,否则您可能最终不得不处理缓冲区大小限制。

关于visual-studio-code - VS Code 的扩展以启动 EXE 并插入从 EXE 返回的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55982510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com