EmEditor v23.1.0 发布(含技术评论)!

我们发布了 EmEditor v23.1.0

在之前的 v23.0 版本中,我们介绍了如何使用新的网页浏览器和宏来访问生成式 AI 的网页并获取各种信息和服务。然而,那些有生成式 AI 站点的付费 API 密钥的用户可以通过直接调用 API 来获得更快、更高质量、运行更稳定的服务。为此,我们使用了 JavaScript 中的 fetch 函数,但由于该函数是异步操作的,因此在宏结束之前可能无法获取到函数的返回值。实际上,即使在 v23.0 中,如果显示了 EmEditor 内置的网页浏览器,也可以使用此方法,但存在如果不显示网页浏览器则无法使用异步函数(async)的问题。在新版本 v23.1 中,通过使用 KeepRunning 属性,现在可以等待异步函数完成而不结束宏(仅限 EmEditor Professional)。 在调用异步函数之前,请指定 KeepRunning 属性,如下所示。


shell.KeepRunning = true;

这使宏保持运行,让您能获取异步函数的返回值。要在获得异步函数的返回值后结束宏,可以指定如下:


shell.KeepRunning = false;

这相当于等待异步函数完成时的 Quit(),会立即结束宏。下面是一个宏的示例,其中使用 fetch 函数来利用 OpenAI API。要运行此宏,您需要将 {your-API-key} 替换为您的 API 密钥。当您运行以下宏时,它会发送问题“你好吗?” 到 OpenAI API 并在输出栏中显示答案。


#language="v8"

const apiKey = "{your-API-key}";

/**
* Sends prompt to OpenAI and returns the response.
* Docs: https://platform.openai.com/docs/guides/text-generation/chat-completions-api?lang=curl
* @param {string} endpoint URL for request
* @param {string} apiKey API key
* @param {string} messageContent The prompt
* @returns {string} The text content of the response
*/
async function callOpenAI(endpoint, apiKey, messageContent) {
const response = await fetch(
endpoint,
{
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"content-type": "application/json",
},
body: JSON.stringify({
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": messageContent,
}
],
}),
}
);
if (!response.ok) {
alert(await response.text());
Quit();
}

const responseObj = await response.json();
if (responseObj.choices.length == 0) {
alert("choices length is 0");
Quit();
}

// Get content of first choice
return responseObj.choices.pop().message.content;
}

async function main() {
const endpoint = "https://api.openai.com/v1/chat/completions";
const sPrompt = "How are you?";
shell.KeepRunning = true;
const response = await callOpenAI(endpoint, apiKey, sPrompt);
OutputBar.writeln( response );
OutputBar.Visible = true;
shell.KeepRunning = false;
}
main();

CharOpenAI.jsee 宏示例进一步扩展了如何运用 OpenAI API。 这个宏能通过显示一个弹出菜单,让用户对所选文本或整个文档提出一系列的常用问题(例如,“校对”、“总结”、“查找”、“翻译”…)。选择要提问的问题后,EmEditor 会将问题发送到 OpenAI API 并在输出栏中显示答案。

实际上,我在撰写此文章时使用了 CharOpenAI.jsee 宏进行翻译和校对。通过将生成式人工智能与文本编辑器相结合,我已经能够显着提高我的工作效率。

v23.1 的另一个主要变化是在处理大文件时的速度提高。在 v23.0 中,行的更改是存储在内存中,而不是临时文件中,以便更快地运行。但是,在内存有限的系统中,这可能会由于系统内存不足而导致速度缓慢甚至崩溃。在 v23.1 中,对内存相关算法进行了修改,以更高效地运行。此外,当虚拟内存不足时,EmEditor 可以使用临时文件来存储数据。用户不再需要担心虚拟内存的大小,并且因内存不足而导致崩溃的频率也显著降低。另外,我们改进了与内存相关的代码,并且使用了多线程SIMD 指令集。这使得在编辑大文件(包括 CSV 文件)时,v23.1 的速度比 v23.0 提高了 1.51 至 41.2 倍

帮助功能现在默认使用外部浏览器,而不是 EmEditor 的内置网页浏览器,类似于 v22.5 及更早版本。此外,在自定义对话框中添加了帮助页面,让您能更改与帮助相关的设置。

最后,Makoto Emura 添加了完成列表功能。要使用此功能,必须在配置属性的语言服务器页面中启用语言服务器协议,并且还必须启用显示完成列表选项(仅限 EmEditor Professional)。目前,只有 JavaScript 支持此功能。

希望您喜欢 EmEditor,无论您使用的是 Professional 还是 Free。如果您有任何问题、功能请求或想法,请联系我们到论坛中留言

感谢您使用 EmEditor!br> — Yutaka Emura

详细信息和截图,请参阅 EmEditor v23.1 新增特性

此发布还包括了 在开发 v23.1 时的 bug 修复

如果您使用的是桌面安装程序版,那您可以到帮助菜单下选择检查更新来下载最新版本。 如果此方法失败,请下载最新版本,并运行下载的安装程序。 如果您使用的是桌面便携版,则可以转到下载页面下载最新版本。商店应用版可以在几天后通过 Microsoft 商店更新( 64 位 / 32 位)。