EmEditor v21.6.0 released (including technical review)!

Today, we are releasing EmEditor v21.6.0.

The previous version of EmEditor allowed you to visualize specified characters, but you had to specify character ranges by character code values if you selected the specified ranges option. This could become a tedious task when character code values of your interest are scattered all over the Unicode chart. The new version allows you to specify character ranges by Unicode Script and Unicode General Category. For instance, if you write only Latin text, it is a good idea to select the Latin (Latn) and Common (Zyyy) scripts, and set the Warn characters outside of the specified ranges option. You can combine Unicode Script with Unicode General Category. For instance, you can set


meaning Latin (Latn) OR Common (Zyyy) scripts AND lowercase letters (Ll) OR uppercase letters (Lu).

To make this feature possible, we have updated the Unicode database included in the EECommon.dll library to allow you to specify character ranges by Unicode Script and/or Unicode General Category. The new information is also included in a dialog box displayed when you select the Character Code Value command. The EECommon.dll library will not be loaded into memory until information is requested, so EmEditor load time will not affected by this feature addition. The EECommon.dll library was first developed by Makoto Emura.

EmEditor v21.1 supported all emoji sequences in Emoji Sequences and Emoji ZWJ Sequences, but they were not comprehensive and not future-proof if new emoji sequences are introduced in the future. The new version of EmEditor used the definition specified in Unicode Technical Standard #51 – Unicode Emoji to support all possible emoji. Supporting emoji means that these emoji characters are displayed correctly as long as they are supported by fonts, and the cursor movement around emoji is correct. While we were working on these changes, we updated the Unicode database to the latest version (Unicode v14.0.0).

A customer asked if it is possible to convert various date formats in a text file to one date format. EmEditor v21.3 supported date/time formats in Number Ranges. While this feature was useful for finding and filtering specific date/time ranges, it was useless if you need to convert them to one specific date/time format. The new version introduces \D and \T expressions to the Replace Expression Syntax. For instance, if you have a text file containing dates with various formats such as:

March 23,2022
Mar 23,2022

and if you want to convert all of these to one format “2022-03-22“, you can press CTRL+H to bring up the Replace dialog box, set the Number Range option, and enter:


[1/1/1900 , 1/1/2200 "M/d/yyyy|MM/dd/yyyy|MMMM d,yyyy|MMM d,yyyy|dd-MMM-yyyy|yyyy-MM-dd|yyyy年M月d日" ]

Replace with:


This Find expression will search for these formats between 1/1/1900 and 1/1/2200, and the matched dates are converted to the yyyy-MM-dd format.

While I was working on the replacement expression syntax, I also added new \Nc, \Nd, \NC, and \ND expressions to normalize strings, using the Unicode Normalization commands introduced on EmEditor v19.8. These new expressions are useful when you need to normalize characters that match certain search criteria.

All of the aforementioned features are supported on EmEditor Professional and EmEditor Free.

The main feature of EmEditor Professional v21.6 is significantly improved speeds of Advanced Filter and Multi-Find with many simple non-regex search strings. A customer asked if it was possible to search a file for 25 million phone numbers. This was not easy on earlier version of EmEditor because it became very slow when more than thousands of search strings are specified. I came up with a new algorithm for this situation, and optimized the code significantly so that it is now possible to accept 25 million search strings simultaneously. While I was working on this optimization, I also made it possible for Advanced Filter and Batch Find/Replace dialog boxes to accept a linked file. A linked file may contain multiple search strings separated by newlines. You can drag and drop a linked file from Explorer to the list box in Advanced Filter or Batch Find/Replace dialog box. You may also drag and drop a linked file to the Filter box on the Filter toolbar to start Advanced Filter immediately. A linked file makes it easier to maintain a set of search strings and to apply the changes instantly to Advanced Filter or Multi-Find. Since EmEditor internally sorts search strings (by length and by alphabetical order) before making searches, you can improve the speed by presorting your linked files. If you decide to presort linked files, set the Fast Binary Comparison and Stable Sort options in the Sort page of the Customize dialog box. The Ignore case option should be set if you don’t match case on Advanced Filter. Open a linked file, select Sort A to Z first, and then select Sort Shortest to Longest. Presorting linked files is not required, and will not change the search results, but will improve the speed.

Furthermore, the Extract All button on the Filter toolbar is now a drop-down button, and clicking the button will display a menu where you can select between the Extract All Lines and Extract Matched Strings commands. The Extract Matched Strings command will extract only one string per line if multiple strings are matched.

I also optimized the speed of the Join CSV command when the … contains …, … starts with …, or … ends with … conditions are selected, using the similar algorithm to the Advanced Filter command.

A customer requested a new option, which is the Selection Mode item in the Status page of the Customize dialog box. If this is set, the status bar indicates “Vertical” while the vertical selection mode is active, and “Lines” while the line selection mode is active.

A customer reported a crash while launching EmEditor, and sent me a crash report file. I looked into the crash report and found that EmEditor crashed by an out-of-memory situation due to a very large file history. This customer was setting 30000 days to the Save Cursor Position option and set the Never Clear Bookmarks option in the History page of the Customize dialog box. This caused a very large file history to be created. To prevent this kind of issue from happening, the new version removed the Never Clear Bookmarks check box, and limit the saving time of cursors and bookmarks to 100 days.

Finally, I hope you like EmEditor, whether you use the Professional or Free version. Please contact us or write in forums if you have any questions, feature requests, or any ideas in the future.)

Thank you for using EmEditor!
Yutaka Emura

Please see EmEditor v21.6 New Features for details and screenshots.

This release also includes the following bug/issue fix:

  • Fixed a bug where the Find Next/Previous Warning Character/Unicode command might have missed surrogate user-defined characters.
  • Fixed a bug where EmEditor could crash at the BatchReplace method if the batch array is empty.
  • Fixed issues related to Layouts.
  • Fixed a bug where the Find Next/Previous button in the Find dialog box did not work well with surrogate characters.
  • Fixed a bug where character spacing might become irregular.
  • Fixed a bug where the vertical scroll position might be at the bottom if a window is split vertically and when switching documents.
  • Fixed a bug where syntax errors appeared when opening certain CSV files but clicking the Check Syntax button cleared all the errors.
  • Fixed a v21.5 bug where EmEditor might have shown the “File changed by another program. Reload with changes?” message box sometimes when network files are opened.
  • Fixed customer-reported issues (1).

If you use the Desktop Installer version, you can select Check for Updates on the Help to download the newest version. If this method fails, please download the newest version, and run the downloaded installer. If you use the Desktop portable version, you can go to the Download page to download the newest version. The Store App versions can be updated through Microsoft Store (64-bit or 32-bit) after a few days. If you use winget, you can type “winget install emeditor” to install the latest version of EmEditor (64-bit or 32-bit detected automatically).