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 位)。