# Version 21.7 新增功能

2022年5月11日

## 一般新增功能

- 新版本會預設用垂直分割視窗顯示比較檔案的結果，當您選擇**比較**或**按參數比較**命令時。之前使用的平鋪視窗顯示仍然可以通過設定選項來實現。
- 如果重新加載之前捲動位置在底部，則新版本將在重新加載檔案時保持捲動位置在底部。
- 當在組態屬性的**檔案**頁面中選擇**偵測全部**選項時，如果 Windows 不支持偵測到的編碼（如**VISCII**），新版本將繼續以系統預設編碼打開檔案並顯示通知。
- 改進了 URI 亮顯顯示。
- 改善了 CSV 選擇模式中的行選取行為。
- 將**水平網格**的預設樣式由**虛線**改為**普通**，並優化**垂直分隔符**的繪制速度。
- 在某些組態（包括 C++）中變更了規則運算式中**結尾縮排**的預設值。
- **批次取代**對話方塊支持**多項取代全部**。**多項取代全部**會在文檔中同時搜索所有搜索字串，而**批次取代全部**則在文檔中一次搜索一個搜索字串，然後重複對每個搜索詞的搜索。**多項取代全部**的速度比**批次取代全部**快得多。詳細信息請參閱[**批次取代全部和多項取代全部之間的區別**](#batch-vs-bulk)。

### 測試結果： {#test-results}

|          | 批次取代全部（v21.7） | 多項取代全部（v21.7） |    比較    |
|----------|-----------------------|-----------------------|------------|
| 取代全部 | 50 分 55 秒           | 0.484 秒              | 快 6310 倍 |

\* 用隨機字串取代 100 萬個隨機字串，忽略大小寫，966 KB，10,000 行，隨機 ASCII 數據。預設選項；操作系統：Windows 11，Core i9-11900K，64GB RAM，2TB SSD。

![比較分割檢視](/media/2022/05/compare_split_view-ugathfjf.webp)

<YouTube video="Rl6lS5YTu60" title="如何取代大型文字檔案中的許多（數百萬）字串" />

### 新增選項

- 添加了**多項取代全部**按鈕到**批次取代**和**批次多檔取代**對話方塊中。
- 添加了**多項尋找**按鈕到**批次多檔尋找**和**批次多檔取代**對話方塊中。
- 添加了**垂直分割**選項按鈕到**比較檔案**精靈的**選擇檢視選項**頁面中。
- 添加了**僅在 EmEditor 處於活動狀態時監控檔案**選項到**自訂**對話方塊的**檔案**頁面上。

```gallery
images:
- src: /media/2022/05/bulk_replace_all_batch_replace-1030x362.webp
  caption: 添加了「多項取代全部」按鈕到「批次取代」對話方塊中。
- src: /media/2022/05/bulk_find_replace_all-1030x647.webp
  caption: 添加了「多項尋找」按鈕和「多項取代全部」按鈕到「批次多檔取代」對話方塊中。
- src: /media/2022/05/bulk_find_batch_find_in_files-1030x610.webp
  caption: 添加了「多項尋找」按鈕到「批次多檔尋找」對話方塊中。
- src: /media/2022/05/split_vertically_compare_wizard-syge5dht-2.webp
  caption: 添加了「垂直分割」選項按鈕到「比較檔案」精靈的「選擇檢視選項」頁面中。
- src: /media/2022/05/customize_file_monitor_files-rcilz7xt-2.webp
  caption: 添加了「僅在 EmEditor 處於活動狀態時監控檔案」選項到「自訂」對話方塊的「檔案」頁面上。
```

### 外掛程式的新增功能

- 添加了 **FLAG_FIND_MULTI** 標志到 **BATCH_INFO** 結構中。
- 添加了 **LFI_DONT_ADD_RECENT** 標志到 **LOAD_FILE_INFO_EX** 結構中。
- 添加了 **COMPARE_SPLIT_VERT** 標志到 **Editor_Compare** 內嵌函式以及 **COMPARE_INFO** 結構中。

### 新增巨集功能

- 添加了 **eeExFindMulti** 標志到 **Selection** 對象的 **BatchReplace** 方法和 **Editor** 對象的 **BatchFindInFiles** 和 **BatchReplaceInFiles** 方法中。
- 添加了 **eeCompareSplitVert** 標志到 **Editor** 對象的 **Compare**方法中。

---

## 批次取代全部和多項取代全部之間的區別 {#batch-vs-bulk}

**批次取代全部**一次在整個文檔中搜索一個字串，並按搜索字串的數量重複此過程。**多項取代全部**同時搜索所有搜索字串。這個區別會導致不同的結果，如果搜索/取代字串配對包含如下範例：

1 → 5\
 2 → 4\
 4 → 2\
 5 → 1

並且如果源文檔是：

[1,2,3,4,5]

在這個情況下，如果用**批次取代全部**，EmEditor 會先把整個文檔中的 1 取代為 5，然後再將 2 取代為 4。這樣，源文檔會變為：

[5,4,3,4,5]

接下來，當它將 4 取代為 2 時，請註意它將取代兩個 4（第二個和第四個數字）。最後，當它將 5 取代為 1 時，它將取代兩個 5（第一個和最後一個數字）。因此，結果將是：

[1,2,3,2,1]

如果使用新的**多項取代全部**，EmEditor 將同時取代所有字串。因此，結果將是：

[5,4,3,2,1]

**多項取代全部**的執行速度會比**批次取代全部**快很多。在我們的測試中，**多項取代全部**的速度比**批次取代全部**快 6310 倍，當搜索/取代配對有 100 萬個時。（請參考[測試結果](#test-results)）。

**多項取代全部**不支援規則運算式，數字範圍，或包含換行的字串。
