-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhelp.htm
More file actions
1132 lines (888 loc) · 123 KB
/
Copy pathhelp.htm
File metadata and controls
1132 lines (888 loc) · 123 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE HTML>
<html lang="en"><head><meta charset="utf-8">
<title>Search++ for Notepad++</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
html, body {margin: 0; padding: 0; width: 100%; height: 100%;}
body {display: flex; flex-direction: column; font: 1em Calibri, Tahoma, sans-serif;}
@media (max-height: 27rem) {
body {display: block;}
}
header {padding: 0 1em; text-align: center;}
header {border-style: none none solid none; border-width: 0 0 2px 0;}
header {font-size: min(5vw,10vh,1.75rem); font-weight: bold;}
footer {padding: 4px 0; width: 100%; display: flex; flex-direction: row; align-items: center; font-size: medium;}
footer {border-style: solid none none none; border-width: 2px 0 0 0;}
footer a[rel=license] {padding: 0 8px; text-decoration: none;}
footer a[rel=license] img {border: none;}
#foottext {flex: 1; margin: 0 1em; text-align: center;}
#foottext a {white-space: nowrap; text-decoration: none; color: inherit; }
#foottext a:hover {text-decoration: underline;}
#foottext.linklist a:link {color: #00c;}
#foottext.linklist a:visited {color: #900;}
#fontdown, #fontup {margin: 0 8px; padding: 0; height: 28px; width: 48px; text-align: center; display: none;}
#fontdown, #fontup {color: #000; border: none; border-radius: 15%/20%; cursor: pointer;}
#fontdown, #fontup {background: transparent;}
#fontdown:hover,
#fontup:hover {background: #333; color: #fff;}
#fontdown {font: inherit; font-size: 13px;}
#fontup {font: inherit; font-size: 19px; line-height: 1.0;}
main {flex: 1; overflow: auto;}
article {padding: 0 1em; line-height: 1.4;}
p {margin: 0; padding: 0;}
p + p {margin: .5em 0 0 0;}
h1 {line-height: 1.25; margin: .5em 0 0 0;}
h1 {font-size: 1.5rem; text-align: center; font-weight: bold; font-style: normal; padding: 0;}
h2 {font-size: 1.2rem; text-align: left; font-weight: bold; font-style: normal; padding: 0; margin: 0;}
h3 {font-size: 1rem; text-align: left; font-weight: bold; font-style: normal; padding: 0; margin: 0;}
main a {white-space: nowrap; text-decoration: none;}
main a:link {color: #00c;}
main a:visited {color: #900;}
main a:hover {text-decoration: underline;}
main a.wrappable {white-space: normal;}
main a.wrappable > span {display: inline-block;}
@media (max-width: 30rem) {
main a {white-space: normal;}
#foottext a {white-space: normal;}
.canhide {display: none;}
}
main article section {border-style: none; border-width: 0; padding: 0 1em .3em 1em; background: #eee;}
main article section {margin: 1.25rem 0 .4rem 0;}
main article section h2 {border-style: none none solid none; border-width: 0 0 1px 0;}
main article section h2 {margin: 0 0 .3em -6px; padding: .2em 0 .2em 6px;}
main article section h3 {border-style: none none solid none; border-width: 0 0 1px 0;}
main article section h3 {margin: .75em 0 .2em 0; padding: .2em 0 .1em 0; line-height: 1.2;}
main article h1+section {margin-top: .75rem;}
main article h1+p {margin-top: .6em;}
main article section+p {margin-top: .75em;}
main article section >
p:first-child {margin-top: .3em;}
main article section.note {font-size: .85em; border-style: solid; border-width: 3px 1px 1px 6px; padding: 0 6px;}
body h1 {margin: 0;}
body .pagenav {font-weight: bold; text-align: center; margin: .5em 1em 0 1em; line-height: 1; background: #eee;}
body .pagenav a {margin: .25em .5em; white-space: normal; display: inline-block}
@media (min-width: 36rem) {
body main {display: flex; flex-direction: row; padding: 0;}
body .pagenav {padding: .5em 0 0 0; margin: 1.25em 1em .4em;}
body .pagenav {white-space: pre;}
body .pagenav {width: 11em; margin-left: calc(max(1em, (100% - (11em + 48em + 4em)) / 2));}
body article {flex: 1; overflow: auto; padding: 0 1em 0 0;}
body h1 {margin-top: .5em;}
}
body article h1 {max-width: calc(32em + 12px);}
body article section {max-width: 48em;}
table {border: none; margin: 1em 0 1em 1em; width: calc(100% - 1em - 2px); border-collapse: collapse;}
table th {padding: .5em .5em .5em .5em; font-weight: bold; text-align: left; vertical-align: top; border: 1px solid black;}
table td {padding: .5em .5em .5em .5em; font-weight: normal; text-align: left; vertical-align: top; border: 1px solid black;}
table .group {text-align: center; background: #d0d0d0; }
div.hscroll {overflow-x: auto;}
ul {margin: 0 0 .5em 0;}
ul li {margin: .25em 0;}
ul.tight li {margin: 0; padding: 0;}
pre {font-size: .9em; line-height: 1.1; background: #ddd; padding: .5em; overflow: auto;}
pre a {white-space: pre;}
div.boxed {margin: 1em 0; padding: 0 0 1em 0; border: 1px solid #000;}
div.boxed > *:first-child {margin-top: 0; margin-left: 0; margin-right: 0; background: #ddd; padding: .5em;}
div.boxed pre {font-size: inherit; margin-top: 0;}
div.boxed p {margin-left: 1em; margin-right: 1em;}
div.boxed ul {margin-right: 1em;}
div.boxed li > code:first-child {font-weight: bold;}
div.boxed pre.example {background: none; margin: .5em 1em 0; border: 1px solid #000;}
body {color: #000; background: #d0d0d0;}
* {border-color: #999;}
table.charnames {border: none; margin: 1em 0 1em 1em; width: calc(100% - 1em - 2px); border-collapse: collapse;}
table.charnames th {padding: 0 .5em 0 .5em; font-weight: bold; text-align: left; vertical-align: top; border: 1px solid black;}
table.charnames td {padding: 0 .5em 0 .5em; font-weight: normal; text-align: left; vertical-align: top; border: 1px solid black;}
table.charnames tr td:first-child + td {text-align: right; font-family: monospace;}
p.note {padding: 0 1.5em; font-size: .93em;}
li > p.note:last-child {padding-bottom: 0.5em;}
div.standout {margin: 1em 0; padding: .5em 1em; border: 5px double #000;}
.nowrap {white-space: nowrap;}
.symbol {width: 1em;}
</style>
<script>
function doPageLoad() {
if (document.getElementById("fontdown")) {
document.getElementById("fontdown").style.display = "inline-block";
document.getElementById("fontup").style.display = "inline-block";
if (window.localStorage) {
var n = localStorage.getItem("ColumnsPlusPlusFontSize");
if (!isNaN(n) && n >= 9 && n <= 40) {
document.documentElement.style.fontSize = n + "px";
document.documentElement.style.fontSize = n + "px";
}
}
}
}
function setFontDown() {
var n = parseFloat(window.getComputedStyle(document.documentElement).fontSize);
if (n > 9) --n;
document.documentElement.style.fontSize = n + "px";
if (window.localStorage) localStorage.setItem("ColumnsPlusPlusFontSize", n);
}
function setFontUp() {
var n = parseFloat(window.getComputedStyle(document.documentElement).fontSize);
if (n < 40) ++n;
document.documentElement.style.fontSize = n + "px";
if (window.localStorage) localStorage.setItem("ColumnsPlusPlusFontSize", n);
if (window.getComputedStyle(document.body).display == "block") window.scrollBy(0,10000);
}
window.addEventListener("load", doPageLoad);
</script>
</head>
<body>
<header>Search++ for Notepad++ documentation</header>
<main>
<nav class=pagenav><a href="#introduction">Introduction</a>
<a href="#purpose" >Purpose</a>
<a href="#plugin" >Plugin menu</a>
<a href="#search" >Search dialog</a>
<a href="#commands" >Search commands</a>
<a href="#results" >Search results window</a>
<a href="#tools" >Tools menu</a>
<a href="#regular" >Regular expressions</a>
<a href="#formulas" >Formulas</a>
<a href="#searchinfiles">Search in Files</a>
<a href="#settings" >Settings</a></nav>
<article>
<section id=introduction><h2>Introduction</h2>
<p><strong>Search++</strong> is an enhanced search plugin for <a href="https://notepad-plus-plus.org/">Notepad++</a>.</p>
<p class=note>Like Notepad++, Search++ is released under the <a href="https://www.gnu.org/licenses/gpl.html">GNU General Public License</a> (either <a href="https://www.gnu.org/licenses/gpl-3.0.html">version 3</a> of the License, or, at your option, any later version). Some original source code files which are not dependent on Notepad++ are released under the <a href="https://www.opensource.org/licenses/MIT">MIT (Expat) license</a>: see individual files for details. Search++ was first released by <a href="http://www.coises.com/">Randall Joseph Fellmy</a> in 2026; you can find the source code on <a href="https://github.com/Coises/SearchPlusPlus">GitHub</a>.</p>
<p class=note><strong>Search++</strong> uses the <a href="https://github.com/ArashPartow/exprtk">C++ Mathematical Expression Toolkit Library (ExprTk)</a> by <a href="https://www.partow.net/">Arash Partow</a>, which is released under the <a href="https://www.opensource.org/licenses/MIT">MIT license</a>; <a href="https://github.com/nlohmann/json">JSON for Modern C++</a> by <a href="https://nlohmann.me">Niels Lohmann</a>, which is released under the <a href="https://www.opensource.org/licenses/MIT">MIT license</a>; the <a href="https://github.com/boostorg/regex/">Boost.Regex library</a>, which is released under the <a href="https://www.boost.org/LICENSE_1_0.txt">Boost Software License, Version 1.0</a>; and <a href="https://unicode-org.github.io/icu/userguide/icu4c/">ICU4C</a>, which is released under the <a href="https://www.unicode.org/license.txt">Unicode License V3</a>. Search++ was built using <a href="https://github.com/Coises/NppCppMSVS">NppCppMSVS</a>.</p>
<p class=note>Search++ does not work with versions of <strong>Notepad++</strong> older than 8.4.3 (release date 2022-07-08).</p>
<div class=standout><p>The current version of Search++ should be considered preliminary. It still a work in progress: features may be missing, behavior and options may change significantly in future releases, and various things might not yet work as intended or documented. Feedback is most welcome at this stage, so I can learn what works well and what requires improvement.</p></div>
<p>To install <strong>Search++</strong>, download the x86 or x64 zip file, depending on whether you're using 32-bit or 64-bit Notepad++, from the latest <a href="https://github.com/Coises/SearchPlusPlus/releases/">release on GitHub</a>. Unzip the file to a folder named <strong>Search++</strong> (the name must be exactly that, or Notepad++ will not load the plugin) and copy that folder into the plugins directory where Notepad++ is installed (usually <strong>C:\Program Files (x86)\Notepad++\plugins</strong> for 32-bit versions or <strong>C:\Program Files\Notepad++\plugins</strong> for 64-bit versions).</p>
<p>This documentation, copyright ©2026 by Randy Fellmy, is provided under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0</a> license.</p>
</section>
<section id=purpose><h2>Purpose</h2>
<p>I wrote <strong>Search++</strong> to bring the extended search capabilities I developed for <a href="https://coises.github.io/ColumnsPlusPlus/help.htm#search">Columns++</a> to a more general-purpose and hopefully more user-friendly search. I also wanted to experiment with alternatives to some of the user interface limitations of both native Notepad++ and Columns++ search.</p>
<p><strong>Search++</strong> differs in several significant ways from the search built into Notepad++:</p>
<ul>
<li><strong>Search++</strong> can be used as a docking dialog or an ordinary dialog. An advantage of the docking dialog is that search results and context will never wind up hidden behind the dialog. As an ordinary dialog, Search++ can be oriented either horizontally or vertically. By default, Search++ opens docked to the right side of Notepad++. You can change that in the <a href="#settings">Settings</a> dialog. (As with any docking window in Notepad++, you <em>can</em> float the docking dialog by dragging its title bar into the main Notepad++ area; however, Search++ as a regular dialog, chosen from the Settings dialog, is likely to be ”better behaved” than a floating dockable dialog.)
<li>The Find and Replace fields in <strong>Search++</strong> are Scintilla controls. This allows for easy inclusion and visualization of multiple lines, line ending characters and special characters, as well as zooming the fields as desired. Find and replace text is shown using the same font as in the main Notepad++ editing window.
<li><strong>Search++</strong> can search within selections (including column selections and multiple selections) and within marked text. Commands are available to <strong>Find All</strong> (send a list of matches to the <strong>Search++ Results</strong> window), <strong>Select</strong>, <strong>Mark</strong> or <strong>Show</strong> (hide all lines, then unhide lines with matches and style the matches).
<li>Regular expression searches in <strong>Search++</strong> perform a fully Unicode-based search using a customized combination of <a href="https://www.boost.org/doc/libs/latest/libs/regex/doc/html/index.html">Boost.Regex</a> and <a href="https://unicode-org.github.io/icu/userguide/icu4c/">ICU4C</a>. In particular, this produces fewer “surprising” results than the native Notepad++ search with Unicode characters above 0xFFFF (including most emoji) and when searching in documents using a DBCS code page (which in Notepad++ can be Chinese, Japanese or Korean files that are in the system default encoding instead of in Unicode).
<li>Regular expression replacements in <strong>Search++</strong> can include numeric calculations. The <a href="#formulas">replacement syntax</a> is similar to the one introduced in <a href="https://github.com/Coises/ColumnsPlusPlus">Columns++</a>.
<li><strong>Search++</strong> includes a <strong>Search in Files</strong> function which uses all cores of your CPU to search multiple files simultaneously. This search supports more extensive filtering of which files to examine, including a regular expression file name match and restrictions by size and/or date.
</ul>
</section>
<section id=plugin><h2>Plugin menu</h2>
<p>Once you have installed Search++, the main <strong>Search++</strong> menu will appear on the <strong>Plugins</strong> menu in Notepad++. You can use the <strong>Plugin commands</strong> tab of the <strong>Shortcut Mapper...</strong> from the <strong>Settings</strong> menu in Notepad++ to assign keyboard shortcuts to commands on this menu. The <strong>Search++</strong> menu offers these choices:</p>
<table>
<tr><th>Search...</th><td>opens the main <a href="#search">Search dialog</a> for searching documents that are open in Notepad++.</td></tr>
<tr><th class=nowrap>Search in Files...</th><td>opens the <a href="#searchinfiles">Search in Files</a> dialog.</td></tr>
<tr><th>Find</th><td>performs the <a href="#search-command-buttons">Find button</a> command in the main Search dialog using the find string and settings in that dialog. If the dialog has never been opened in the current session of Notepad++ it opens the dialog instead.</td></tr>
<tr><th>Replace</th><td>performs the <a href="#search-command-buttons">Replace button</a> command in the main Search dialog using the find and replace strings and settings in that dialog. If the dialog has never been opened in the current session of Notepad++ it opens the dialog instead.</td></tr>
<tr><th class=nowrap>Tools menu</th><td>opens the <a href="#tools">Tools menu</a>.</td></tr>
<tr><th>Settings...</th><td>opens the Search++ <a href="#settings">Settings</a> dialog.</td></tr>
<tr><th class=nowrap>Help/About...</th><td>shows a dialog that provides access to release/version identification, this help file, and changelog, license and source information.</td></tr>
</table>
<p class=note><strong>Find</strong>, <strong>Replace</strong> and <strong>Tools menu</strong> are mostly useful when set as keyboard shortcuts.</p>
<p class=note>If you rarely use <strong>Alt+F</strong> and <strong>Alt+R</strong> to access <strong>File</strong> and <strong>Run</strong> on the Notepad++ menu bar, consider using those combinations as shortcuts for <strong>Find</strong> and <strong>Replace</strong> to maintain consistency with the shortcuts in the main Search++ dialog. You might also want to check <a href="#settings-focus" class=wrappable>Focus the document after stepwise Find or Replace commands</a> so that after beginning a stepwise search in the Search dialog, you can immediately work in the document without changing focus, while using <strong>Alt+F</strong> and <strong>Alt+R</strong> to continue the search.</p>
</section>
<section id=search><h2>Search dialog</h2>
<p>Open the main <strong>Search++</strong> dialog by selecting <strong>Search...</strong> from the <strong>Search++</strong> sub-menu on the <strong>Plugins</strong> menu. If you use <strong>Search++</strong> often, you will probably want to assign a key combination to this using <strong>Shortcut Mapper...</strong> from the <strong>Settings</strong> menu in Notepad++. This dialog can be either a regular dialog or a docking dialog. By default, it opens docked to the right side of the Notepad++ window. You can change this in the <a href="#settings">Settings</a>.</p>
<h3 id="search-engine">Search engine selection</h3>
<p>At the top left of the dialog there are buttons from which you can choose a <strong>Plain</strong> text search or a <strong>Regex</strong> (regular expression) search.</p>
<p class=note>In preliminary versions thus far there is a third button labeled <strong>ICU</strong>. ICU search is primarily intended for comparison testing during development; it may be removed before the first stable version. At present it provides a relatively straightforward implementation of finding (no replacing) in UTF-8 documents only using the regular expression engine built into ICU4C.</p>
<p>A <strong>Plain</strong> text search is simple: it looks for exactly what you’ve entered in the Find box. Options further down in the dialog let you choose whether to match or ignore case and whether to search only for whole words. Stepwise plain text searches can proceed forward (right and down the page) or backward (left and up the page).</p>
<p>A regular expression (<strong>Regex</strong>) search allows you to specify a pattern to find and a replacement string that can reference parts of the pattern that matched. The <a href="#regular">Regular expressions</a> section of this help describes them in detail. Stepwise regular expression searches can only move forward (right and down the page).</p>
<h3 id="search-tools">Tools</h3>
<p>The <strong>Tools</strong> button, to the right of the search engine selection buttons, opens a <a href="#tools">menu</a> that offers some convenient settings and actions you might want to use in conjunction with searching. You can also access these functions using the associated keyboard shortcuts when focus is in the Search dialog.</p>
<h3 id="search-boxes">The Find and Replace boxes</h3>
<p>There are two large text entry areas in the dialog; depending on whether the dialog is oriented vertically or horizontally, they will be near the top and bottom or at the left and right. The top or left one is the <strong>Find box</strong> and the bottom or right one is the <strong>Replace box</strong>.</p>
<p>The Find and Replace boxes display centered dots for blanks, a right arrow for a tab, and a symbols for each possible line ending: 🠇 for a new line (Unix style line ending), 🠄 for a carriage return (Macintosh style line ending) and ↩ for a carriage return / new line combination (Windows style line ending). The color of these will be the one specified in your Notepad++ Global Styles for the White space symbol. Other invisible characters will be shown as black boxes with the control character code inside (the same way as in Notepad++ when <strong>View</strong> | <strong>Show Symbol</strong> | <strong>Show All Characters</strong> is checked).</p>
<p>Right-click in the Find or Replace box, or use the <strong>Apps</strong> key or <strong>Shift+F10</strong>, to bring up a context menu. A number of useful commands can be found there, along with their keyboard shortcuts:</p>
<ul>
<li>Ordinary editing commands (Undo, Redo, Cut, Copy, Paste, Delete, Select All) are available with their customary keyboard shortcuts.
<li><strong>Wrap</strong> submenu: By default, the text in the Find and Replace boxes wraps without regard to word boundaries; you can change that by pressing <strong>Ctrl+W</strong> to cycle through the choices (character wrap, word wrap and no wrapping) or by using the <strong>Wrap</strong> commands from the context menu.
<li><strong>Zoom</strong> submenu: You can change the size of text in the Find and Replace boxes by zooming; you can use the Ctrl key with the mouse wheel, Ctrl with the plus and minus keys on the numeric keypad, or the <strong>Zoom</strong> commands from the context menu.
<li><strong>Insert/Exchange</strong> submenu: <strong>Insert selection</strong> (<strong>Ctrl+I</strong>) pastes whatever is selected in the active Notepad++ document at the caret or in place of the current selection. <strong class=nowrap>Copy Find</strong> (<strong>Ctrl+F</strong>) pastes a copy of the Find box text. (If you are already in the Find box, it replaces the Replace box text with the Find box text.) <strong class=nowrap>Copy Replace</strong> (<strong>Ctrl+R</strong>) pastes a copy of the Replace box text. (If you are already in the Replace box, it replaces the Find box text with the Replace box text.) <strong class=nowrap>Exchange Find/Replace</strong> (<strong>Ctrl+E</strong>) exchanges the contents of the Find and Replace boxes.
<li>The bottom section of the context menu lets you select from a history of the last twelve strings you used in searches.
</ul>
<h3 id="search-command-buttons">Search command buttons</h3>
<p>There are five search command buttons. <strong>Find</strong>, <strong>Count</strong> and <strong>Find All</strong> are beneath the Find box; <strong>Replace</strong> and <strong>Replace All</strong> are beneath the Replace box. Each button has a downward chevron at the right which opens a menu of similar commands you can select instead of the main command on the button.</p>
<p>You can Shift+click or right-click an item in the drop-down menu for a command button to perform its action <strong><em>and make it the new direct click action for the button</em></strong>. The first item in each menu is the default action for the button, so you can always reset it whenever you wish.</p>
<p>When <strong>Plain</strong> text search is selected, you can Shift+click the <strong>Find</strong> or <strong>Replace</strong> button to reverse the direction of the search (swap <strong>Forward</strong> and <strong>Backward</strong>).</p>
<p>A detailed description of the available commands is provided in the <a href="#commands">Search commands</a> section of this help.</p>
<h3 id="search-options">Search options</h3>
<p>The search options are simple checkboxes you can enable or disable. Different options are available for different search engines:</p>
<ul>
<li><strong>Match case</strong> indicates that the case of letters matters: that is, <strong>A</strong> is different from <strong>a</strong>. When this box is not checked, letters match regardless of case (<strong>A</strong> matches <strong>A</strong> or <strong>a</strong>).
<li><strong>Whole word only</strong> indicates matches cannot match only part of a word (e.g., <strong>the</strong> will not match the “the” in <strong>anthem</strong>. This option is only available for plain text searches.
<li><strong>Dot matches line breaks</strong> applies only to regular expression searches. It indicates that the period (<strong>.</strong>) matches any one Unicode code point. When not checked, the period does not match the characters that end lines in Notepad++ (linefeed and carriage return).
<li><strong>Free spacing</strong> applies only to regular expression searches. It indicates that unescaped “white space” (spaces, tabs and line-endings) and comments (a <strong>#</strong> sign and all text following it on the same line) in the search string are to be ignored by the regular expression engine, so you can use these characters to make complex search strings easier to read and edit.
<li><strong>Unicode word boundaries</strong> enables the use of a sophisticated definition of word boundaries developed as part of the <a href="https://www.unicode.org/reports/tr29/#Word_Boundaries">Unicode Standard</a>. At present this option is only available for the ICU search engine.
</ul>
<h3 id="search-keyboard">Keyboard navigation</h3>
<p>The search dialog responds to the usual methods of keyboard navigation for a dialog (such as typing an underlined character with the Alt key). In addition to those and the shortcuts associated with the <a href="#tools">Tools menu</a>, there are several general navigation commands you can use in the Search dialog, the <a href="#searchinfiles">Search in Files</a> dialog and the <a href="#results">Search results window</a>:</p>
<table>
<tr><th>Ctrl+G</th><td>Open the Search in Files dialog if it is not already open, and switch keyboard focus to it.</td></tr>
<tr><th>Ctrl+H</th><td>Swap keyboard focus between the search dialog and the search results window. If the target dialog or window is not visible, open it.</td></tr>
<tr><th>Ctrl+N</th><td>Return keyboard focus to the active Notepad++ document.</td></tr>
<tr><th>Ctrl+O</th><td>If keyboard focus is in the Find box in the Search dialog, switch to the Replace box; otherwise, switch focus to the Find box. If focus is in the Search results window or the Search in Files dialog and the Search dialog is not visible, open it.</td></tr>
<tr><th>Ctrl+Shift+G</th><td>Close the Search in Files dialog if it is open. If focus was in the Search in Files dialog, return it to the active Notepad++ document.</td></tr>
<tr><th>Ctrl+Shift+H</th><td>Close the Search results window if it is open. If focus was in the Search results window, return it to the active Notepad++ document.</td></tr>
<tr><th>Ctrl+Shift+N</th><td>Close the Search dialog, the Search in Files dialog and the Search results window, and return focus to the active Notepad++ document.</td></tr>
<tr><th>Ctrl+Shift+O</th><td>Close the Search dialog if it is open. If focus was in the Search dialog, return it to the active Notepad++ document.</td></tr>
</table>
<h3 id="search-status">Status messages</h3>
<p>The bottom of the search dialog shows a status message which summarizes the results of the last search command. If the message is too long to fit the width of the search dialog, the status line shows an ellipsis (<strong>…</strong>) at the right; hover the mouse pointer over the status line to see the entire message in a balloon tip.</p>
</section>
<section id=commands><h2>Search commands</h2>
<p>Search commands are issued by clicking one of the command buttons in the search dialog or by selecting one the entries from the drop-down menus for those buttons. There are three parts to a search command: the <em>action</em>, the <em>extent</em> and the <em>scope</em>.</p>
<h3 id="commands-actions">Search actions</h3>
<p>Search actions define what sort of thing a command will do. There are two categories of search actions: <em>stepwise</em> and <em>multiple</em>. Stepwise actions find and/or replace one occurrence at a time; multiple actions search for as many occurrences as possible, under specified constraints, at once:</p>
<table>
<tr><th class="group" colspan=2>Stepwise search actions</th></tr>
<tr><th>Find</th><td>finds one occurrence of the search string. The default <a href="#commands-extent">extent</a> for find commands is forward, starting from the current position or selected text. For plain text searches, Find can also have the <strong>Backward</strong> extent.</td></tr>
<tr><th>Replace</th><td><p>first finds a match (unless a match has just been found), then on subsequent clicks replaces the match with the text or expression in the Replace box. After replacing, the command can either leave the replacement selected and visible, or find and select the next match. Which of these happens when you click the <strong>Replace</strong> button (or type <strong>Alt+R</strong>) is determined by the <strong>Jump to next match after Replace</strong> toggle on the <a href="#tools">Tools</a> menu. You can also tell by looking at the button; the word <strong>Replace</strong> will be followed by one of these indicators:</p>
<table>
<tr><th class=symbol>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 1010 1000">
<path fill="currentColor"
d="M20 545v-90h804l-263 -263h121l308 308l-308 308h-121l263 -263h-804z" />
</svg>
</th><td>replace then jump to a new match forward</td></tr>
<tr><th>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 1010 1000">
<path fill="currentColor"
d="M980 545h-804l263 263h-121l-308 -308l308 -308h121l-263 263h804v90z" />
</svg>
</th><td>replace then jump to a new match backward</td></tr>
<tr><th>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 1010 1000">
<path fill="currentColor"
d="M20 545v-90h549l-263 -263h121l307 308l-307 308h-121l263 -263h-549zM890 180h90v640h-90v-640zM735 180h90v640h-90v-320v-320z" />
</svg>
</th><td>replace and select replacement; next click finds a new match forward</td></tr>
<tr><th>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 1010 1000">
<path fill="currentColor"
d="M265 180v640h-90v-640h90zM110 180v640h-90v-640h90zM980 545h-549l263 263h-121l-307 -308l307 -308h121l-263 263h549v90z" />
</svg>
</th><td>replace and select replacement; next click finds a new match backward</td></tr>
</table>
<p>The drop-down menu for the <strong>Replace</strong> button offers the available commands with the same jump behavior as the direct click command on the button; a submenu at the bottom allows you to select the same commands with the opposite jump behavior. Click-selecting a command from that submenu will set it as the direct click command and toggle the <strong>Jump to next match after Replace</strong> setting.</p></td></tr>
</table>
<table>
<tr><th class="group" colspan=2>Multiple search actions</th></tr>
<tr><th>Count</th><td>shows a message at the bottom of the search dialog telling how many occurrences of the search string were found.</td></tr>
<tr><th>Find All</th><td>searches for occurrences of the find string and lists them in the <a href="#results">Search results window</a>.</td></tr>
<tr id="commands-select"><th>Select</th><td><p>searches for occurrences of the find string and creates a multiple selection with one selection corresponding to each match. By default, any existing selection is cleared if the search succeeds; you can change this behavior in the <a href="#settings-clearing">Settings</a> dialog.</p>
<p class=note>It is possible to <strong>Select In Selection</strong>. After determining which text is selected, previous selections are cleared when a <strong>Select in Selection</strong> command succeeds, regardless of the <strong>Always clear selections before Select command</strong> setting, since the command could accomplish nothing otherwise.</p></td></tr>
<tr id="commands-mark"><th>Mark</th><td><p>searches for occurrences of the find string and marks the matches using the <strong>Mark style</strong> selected in the <a href="#settings-marked-text">Settings</a> dialog. By default, marks already in the document are not cleared; you can change this behavior in the <a href="#settings-clearing">Settings</a> dialog.</p>
<p class=note>The default <strong>Mark style</strong> is the <em>Find Mark Style</em>, which is the same style used by the <strong>Mark</strong> tab of the built-in search dialog in Notepad++.</p>
<p class=note></p>
<p class=note>It is not possible to mark empty (zero-length) matches, and marked text cannot separate adjoining matches: if two or more matches have no intervening characters, they constitute a single run of marked text. If you need to keep adjoining matches separate and/or to retain empty matches, use <strong>Select</strong> rather than <strong>Mark</strong>.</p>
<p class=note>It is possible to <strong>Mark in Marked Text</strong>. After determining which text is marked, all previously marked text is unmarked when a <strong>Mark in Marked Text</strong> command succeeds, regardless of the <strong>Always unmark all text before a mark command</strong> setting, since the command could accomplish nothing otherwise.</p></td></tr>
<tr><th>Show</th><td><p>unhides lines containing matches and shows the matches using the <strong>Show style</strong> selected in the <a href="#settings-marked-text">Settings</a> dialog. If no lines are hidden before the command is given, <strong>Show</strong> first hides all lines. By default, if any lines are already hidden, <strong>Show</strong> doesn’t hide anything, and it doesn’t remove the Show style from text that already has it; you can change this behavior in the <a href="#settings-clearing">Settings</a> dialog.</p>
<p class=note>The default <strong>Show style</strong> is <em>Mark Style 5</em>.</p>
<p class=note>Unlike <strong>Mark</strong>, which uses only the style assigned to it, <strong>Show</strong> uses an additional style to indicate empty matches from regular expressions with an upward-pointing triangle on the baseline of the text in the same color as the Show style. However, there is a limitation: the empty match mark won’t be visible at the end of lines if line endings are not shown, and an empty match at the very end of the document will never be visible. This additional style is only used with Notepad++ versions 8.5.6 (release date 2023-08-15) or later.</p></td></tr>
<tr><th>Replace All</th><td>searches for occurrences of the find string and replaces them with the replace string.</td></tr>
</table>
<h3 id="commands-extent">Search extents</h3>
<p>Search extents describe how the search “extends” from the current position or selection. Stepwise search actions can search forward or (for <strong>Plain</strong> text searches) <strong>Backward</strong>. Multiple search actions can search throughout the active document or <strong>Before</strong> or <strong>After</strong> the current position or selection. <strong>Find All</strong> and <strong>Mark</strong> commands can also search <strong>in Open Documents</strong> or <strong>in Documents in this View</strong>:</p>
<table>
<tr><th class="group" colspan=3>Search extents for stepwise search actions</th></tr>
<tr><td colspan=3>The symbols in the second column are used on command buttons to indicate the current click action.</td></tr>
<tr><td>forward</td><th class=symbol>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 1010 1000">
<path fill="currentColor"
d="M20 545v-90h804l-263 -263h121l308 308l-308 308h-121l263 -263h-804z" />
</svg>
<br>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 1010 1000">
<path fill="currentColor"
d="M20 545v-90h549l-263 -263h121l307 308l-307 308h-121l263 -263h-549zM890 180h90v640h-90v-640zM735 180h90v640h-90v-320v-320z" />
</svg>
</th><td>is the default for stepwise search actions (<strong>Find</strong> and <strong>Replace</strong>). It means moving from the current position or selection to the right and downward through the document. When a forward command can find nothing (or nothing more), a message at the bottom of the search dialog will indicate that. Clicking the same button again will “wrap around” to the beginning of the search scope (unless you already started from the beginning).</td></tr>
<tr><th>Backward</th><th class=symbol>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 1010 1000">
<path fill="currentColor"
d="M980 545h-804l263 263h-121l-308 -308l308 -308h121l-263 263h804v90z" />
</svg>
<br>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 1010 1000">
<path fill="currentColor"
d="M265 180v640h-90v-640h90zM110 180v640h-90v-640h90zM980 545h-549l263 263h-121l-307 -308l307 -308h121l-263 263h549v90z" />
</svg>
</th>
<td>is available for stepwise search actions only when searching for <strong>Plain</strong> text. It means moving from the current position or selection to the left and upward through the document. When a Backward command can find nothing (or nothing more), a message at the bottom of the search dialog will indicate that. Clicking the same button again will “wrap around” to the end of the search scope (unless you already started from the end).</td></tr>
</table>
<table>
<tr><th class="group" colspan=3>Search extents for multiple search actions</th></tr>
<tr><td colspan=3>The symbols in the second column are used on command buttons to indicate the current click action.</td></tr>
<tr><td>throughout the active document</td><th class=symbol>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 726 1000">
<path fill="currentColor"
d="M358 990l-308 -308v-121l263 263v-648l-263 263v-121l308 -308l308 308v121l-263 -263v648l263 -263v121z" />
</svg>
</th><td>is the default extension for command actions that search for multiple occurrences at one time. The entire <a href="#commands-scopes">scope</a> (the selection, marked text or the whole document) is searched. This extension is implied unless one of the other extensions is part of the command name.</td></tr>
<tr><th>Before</th><th class=symbol>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 726 1000">
<path fill="currentColor"
d="M313 980v-804l-263 263v-121l308 -308l308 308v121l-263 -263v804h-90z" />
</svg>
</th><td><p>applies the command action only to matches that occur to the left and upward in the active document relative to the current position or selection. The action is not applied to matches which overlap the current position or selection.</p>
<p class=note>If there is a single selection which is the result of an immediately preceding stepwise find, or the find step of a stepwise replace, <strong>Replace Before</strong> <em>includes</em> the found text. This lets you do a series of stepwise backward replaces and then complete them with a Replace Before.</p>
</td></tr>
<tr><th>After</th><th class=symbol>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 726 1000">
<path fill="currentColor"
d="M403 20v804l263 -263v121l-308 308l-308 -308v-121l263 263v-804h90z" />
</svg>
</th><td><p>applies the command action only to matches that occur to the right and downward in the active document relative to the current position or selection. The action is not applied to matches which overlap the current position or selection.</p>
<p class=note>If there is a single selection which is the result of an immediately preceding stepwise find, or the find step of a stepwise replace, <strong>Replace After</strong> <em>includes</em> the found text. This lets you do a series of stepwise replaces and then complete them with a Replace After.</p>
</td></tr>
<tr><th>Open Documents</th><th class=symbol>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 1010 1000">
<path fill="currentColor"
d="M545 110v780h320v-780h-320zM45 20h910v960h-910v-960zM135 110v780h320v-780h-320z" />
</svg>
</th><td>searches all documents that are open in any tab in Notepad++.</td></tr>
<tr><th>Documents in this View</th><th class=symbol>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 1010 1000">
<path fill="currentColor"
d="M45 20h910v960h-910v-960zM135 110v780h365v-780h-365z" />
</svg>
</th><td>searches all documents that are open in any tab in the active view. Notepad++ has one or two views. If there is only one view open, <strong>Documents in this View</strong> is the same as <strong>Open Documents</strong>.</td></tr>
</table>
<h3 id="commands-scopes">Search scopes</h3>
<p>Search scopes determine what will be searched: the <strong>Selection</strong>, <strong>Marked Text</strong> or the <strong>Whole Document</strong>. The default is to determine the effective scope based on whether there is already a selection or marked text in the document:
<table>
<tr><th colspan=3 class="group">Search scopes</th></tr>
<tr><td colspan=3>The symbols in the second column are used on command buttons to indicate the current click action.</td></tr>
<tr><th>Selection</th><th class=symbol>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 1010 1000">
<path fill="currentColor"
d="M446 394c10 18 32 31 64 46c52 24 96 39 135 77c21 21 34 55 34 107c0 66 -20 112 -59 143c-41 33 -84 50 -130 50c-21 0 -42 -4 -70 -12c-31 -7 -56 -18 -76 -32c-18 -13 -23 -25 -23 -37c0 -16 4 -28 13 -39c6 -7 13 -13 29 -13c3 0 17 3 37 11c26 10 52 19 52 20
c16 7 37 7 45 7c21 0 40 -6 54 -25c14 -17 23 -40 23 -64c0 -60 -43 -81 -76 -97c-56 -26 -72 -31 -103 -48c-18 -10 -33 -25 -45 -44c-11 -18 -18 -43 -18 -77c0 -42 10 -75 27 -101c48 -70 115 -82 149 -82c38 0 72 9 99 24c33 18 34 37 34 48c0 14 -3 23 -11 32
c-7 7 -15 11 -27 11c-8 0 -24 -4 -45 -12c-18 -9 -37 -14 -55 -14c-42 0 -67 39 -67 81c0 14 4 28 10 40zM500 987c-269 0 -487 -218 -487 -487s218 -487 487 -487s487 218 487 487s-218 487 -487 487zM500 103c-219 0 -397 178 -397 397s178 397 397 397s397 -178 397 -397
s-178 -397 -397 -397z" />
</svg>
</th><td><p>only selected text will be searched.</p>
<p class=note>Because a <strong>Find</strong> command, or the preliminary find step in a replace command, selects the found text, subsequent commands won’t be confined to the originally-selected text, since it will no longer be selected. To avoid this, you can use <strong>Add Selection to Marked Text</strong> from the <a href="#tools">Tools</a> button menu before searching. Also see the <a href="#settings-selections">Settings</a> checkbox <strong>Convert selections to marked text when beginning a default stepwise search</strong> for an option to do this automatically.</p>
<p class=note>For a regular expression search, each line in a rectangular selection and each selection in a multiple selection is searched independently; the search in any line or selection cannot “see” outside that selection. This affects the behavior of assertions (including word boundaries, lookaheads and lookbehinds, <strong>^</strong> and <strong>$</strong>).</p></td></tr>
<tr><th>Marked Text</th><th class=symbol>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 1010 1000">
<path fill="currentColor"
d="M180 110v780h640v-780h-640zM90 20h820v960h-820v-960zM270 200h90l140 266l140 -266h90v600h-90v-425.479l-140 271.479l-140 -271.479v425.479h-90v-600z" />
</svg>
</th><td><p>only marked text will be searched.</p>
<p class=note>For a regular expression search, each run of marked text is searched independently; the search in any span of marked text cannot “see” outside that span. This affects the behavior of assertions (including word boundaries, lookaheads and lookbehinds, <strong>^</strong> and <strong>$</strong>).</p>
</td></tr>
<tr><th>Whole Document</th><th class=symbol>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 1010 1000">
<path fill="currentColor"
d="M90 20h820v960h-820v-960zM180 110v780h640v-780h-640z" />
</svg>
</th><td>selections and marks are ignored; everything in the document (subject to any <em>extent</em> constraint) is searched.</td></tr>
<tr><td>default scope</td><th class=symbol>
</th><td>attempts to infer what you probably want to search based on whether anything is already marked or selected. The default rules are these:
<ol>
<li>Scope is not inferred for commands <strong>in Open Documents</strong> or <strong>in Documents in this View</strong>. A command with one of these qualifiers can also indicate that it is <strong>in Marked Text</strong>; otherwise it is <strong>in Whole Document</strong>.
<li>If there is any marked text in the active document, only marked text is searched, except for the default <strong>Mark</strong> command; an unqualified <strong>Mark</strong> command adds to the marked text instead of searching within it.
<li>If there is no marked text, but there is a multiple selection or a rectangular selection, the selection is searched.
<li>If there is no marked text, but there is a single selection encompassing at least 80 characters <em>and</em> three lines, it will be searched.
<li>Otherwise, the whole document is searched.
</ol>
<p>You can make various adjustments to the default scope rules in the <a href="#settings">Settings</a> dialog.</p>
</td></tr>
</table>
</section>
<section id=results><h2>Search results window</h2>
<p>The <strong>Find All</strong> command and its variants, like <strong>Find All in Open Documents</strong> or <strong>Find All in Marked Text</strong>, list the matches found in the <strong>Search++ Results</strong> window. The <a href="#searchinfiles">Search in Files</a> dialog also sends results to this window. The Results window is a docking window which, by default, appears at the bottom of the Notepad++ window. Once a search results window is initialized, its content is kept as long as Notepad++ remains open unless you explicitly clear it or enable <strong>Automatically purge prior searches</strong>. Newer commands add results to the top of the window. You can close the window, and if you later reopen it (by doing another <strong>Find All</strong> command or by pressing <strong>Ctrl+H</strong> in the search dialog) during the same Notepad++ session, the content will still be there.</p>
<p>Each search is headed by a gold-colored line showing the number of matches and the find string. Below that is a section for each document in which matches were found, beginning with a header line giving the file name and the number of lines in that file that contain matches. Below that, each line which has any matches is listed and the matches are selected.</p>
<p>There are a number of commands recognized in the Search++ Results list. You can right-click or use the <strong>Apps</strong> key or <strong>Shift+F10</strong> to open a context menu. Most commands also have keyboard shortcuts, and some can be activated using the mouse:</p>
<table>
<tr><th colspan=5 class=group>Search++ Results list commands that apply to specific line types</th></tr>
<tr><th>applies to</th><th>context menu</th><th>shortcut</th><th>mouse</th><th>action</th></tr>
<tr><td rowspan=2>Search headers</td><td>Expand/Collapse Search</td><td>Enter</td><td class=nowrap>double-click<br>or<br>click margin</td><td>Expand or collapse the list of documents and matches for this search.</td></tr>
<tr><td>Expand/Collapse Documents</td><td>Shift+Enter</td><td class=nowrap>Shift+double-click<br>or<br>Shift+click margin</td><td>Expand or collapse the lists of matches for all documents within this search, while leaving the document headers visible.</td></tr>
<tr><td rowspan=2>Document headers</td><td>Expand/Collapse Document</td><td>Enter</td><td class=nowrap>double-click<br>or<br>click margin</td><td>Expand or collapse the list of matches for this document.</td></tr>
<tr><td>Open Document</td><td>Shift+Enter</td><td class=nowrap>Shift+double-click<br>or<br>Shift+click margin</td><td>Open this document in Notepad++ if it is not already open, and switch to it.</td></tr>
<tr><td rowspan=2>Matched lines</td><td>Locate in Document</td><td>Enter</td><td class=nowrap>Shift+double-click<br>or<br>Shift+click margin</td><td><p>Open this document in Notepad++ if it is not already open; switch to it; set the caret or selection in the document to match the caret or selection in the results list and scroll to make it visible; leave keyboard focus in the search results list.</p><p>When double-clicking within a match, the entire match is selected both in the Search++ Results list and in the document. When clicking in the margin, the caret is positioned at the beginning of the line in the document and nothing is selected; the caret or selection in the Search++ Results window is unchanged.</p></td></tr>
<tr><td>Move Here in Document</td><td>Shift+Enter</td><td class=nowrap>double-click<br>or<br>click margin</td><td><p>Open this document in Notepad++ if it is not already open; switch to it; set the caret or selection in the document to match the caret or selection in the results list and scroll to make it visible; switch keyboard focus to the document.</p><p>When double-clicking within a match, the entire match is selected both in the Search++ Results list and in the document. When clicking in the margin, the caret is positioned at the beginning of the line in the document and nothing is selected; the caret or selection in the Search++ Results window is unchanged.</p></td></tr>
</table>
<table>
<tr><th colspan=3 class=group>Search++ Results list commands that are available on all lines</th></tr>
<tr><th>context menu</th><th>shortcut</th><th>action</th></tr>
<tr><td>Go to Next Match</td><td>Tab</td><td>Select the first match in the results list following the caret position.</td></tr>
<tr><td>Go to Previous Match</td><td>Shift+Tab</td><td>Select the first match in the results list preceding the caret position.</td></tr>
<tr><td>Go to Document Below</td><td>Ctrl+D</td><td>Move the caret to the beginning of the first document header line following the caret position.</td></tr>
<tr><td>Go to Document Above</td><td>Ctrl+Shift+D</td><td>Move the caret to the beginning of the first document header line preceding the caret position.</td></tr>
<tr><td>Go to Search Below</td><td>Ctrl+S</td><td>Move the caret to the beginning of the first search header line following the caret position.</td></tr>
<tr><td>Go to Search Above</td><td>Ctrl+Shift+S</td><td>Move the caret to the beginning of the first search header line preceding the caret position.</td></tr>
<tr><td>Clear all searches in this list</td><td></td><td>Remove everything from the Search++ Results list.</td></tr>
<tr><td>Clear all searches below this one</td><td></td><td>Remove from the Search++ results list all searches, documents and matches beginning with the first search header following the caret position.</td></tr>
<tr><td>Automatically purge prior searches</td><td></td><td>This is a toggle. When checked, everything is removed from the Search++ results list before adding new results from Find All or Find in Files searches.</td></tr>
<tr><td>Copy</td><td>Ctrl+C</td><td>Copy whatever is selected in the Search++ Results list to the clipboard.</td></tr>
<tr><td>Select All</td><td>Ctrl+A</td><td>Select everything in the Search++ Results list.</td></tr>
<tr><td>Wrap</td><td>Ctrl+W</td><td>Switch between wrap modes: no wrap (scroll left and right), character wrapping (lines wrap immediately after the last character that fits on a line) or word wrapping (lines wrap at word breaks, if possible, otherwise after the last character that fits).</td></tr>
<tr><td>Zoom</td><td>Ctrl+Num+, Ctrl+Num-, Ctrl+Num/</td><td>Increase, decrease or reset the size of text in the Search++ Results list.</td></tr>
</table>
<p>You can use the <a href="#search-keyboard">general navigation</a> keyboard shortcuts described for the Search dialog in the Search results window, too.</p>
</section>
<section id=tools><h2>Tools menu</h2>
<p>The <strong>Tools</strong> menu offers some convenient settings and actions you might want to use in conjunction with searching. You can open it using the <strong>Tools</strong> button in the main Search dialog, with the <strong>Tools menu</strong> command on the <a href="#plugin">plugin menu</a>, or with a keyboard shortcut set to the plugin menu command.</p>
<p>You can use the keyboard shortcuts associated with these functions when keyboard focus is in the main Search dialog. (The menu shows the shortcuts when it is opened using the <strong>Tools</strong> button.) When focus is in the document, you can use a keyboard shortcut you’ve set to the plugin menu command to open the Tools menu without first setting focus to the Search dialog; then use the mouse or the underlined letter in each item to make a selection.</p>
<table>
<tr><th colspan=3 class=group>Search++ Tools menu commands</th></tr>
<tr><th>Search in <u>O</u>pen Documents...</th><th>Ctrl+O<br>Ctrl+Shift+O</th><td><p>opens or sets keyboard focus to the main <a href="#search">Search dialog</a>.</p><p class=note>Right-click or use the Shift key with this option to close the main Search dialog.</p><p class=note>This option does not appear on the menu shown by the Tools button.</p></td></tr>
<tr><th>Search in <u>F</u>iles...</th><th>Ctrl+G<br>Ctrl+Shift+G</th><td><p>opens or sets keyboard focus to the <a href="#searchinfiles">Search in Files</a> dialog.</p><p class=note>Right-click or use the Shift key with this option to close the Search in Files dialog.</p></td></tr>
<tr><th>Searc<u>h</u> Results...</th><th>Ctrl+H<br>Ctrl+Shift+H</th><td><p>opens or sets keyboard focus to the <a href="#results">Search results window</a>.</p><p class=note>Right-click or use the Shift key with this option to close the Search results window.</p></td></tr>
<tr><th><u>B</u>ookmark lines when marking text (Shift: configure)</th><th>Ctrl+B<br>Ctrl+Shift+B</th><td><p>This is a toggle. When checked, <strong>Mark</strong> commands also bookmark each line in which they find a match, and certain other commands on the <strong>Tools</strong> menu may affect bookmarks. When this option is not checked, Search++ does not add or remove bookmarks except in response to commands on the <strong>Synchronize marks and bookmarks</strong> sub-menu.</p><hr><p>Right-click or use the Shift key with this option to open the <strong>Configure bookmarks</strong> dialog, which contains the following options:</p><ul>
<li><strong>Bookmark lines when marking text</strong>:<br>This is identical to the menu option; it is repeated in the dialog for convenience. The other settings in the dialog are disabled, and have no effect, unless this option is checked.
<li><strong>When bookmarking marked text</strong>
<ul>
<li><strong>Bookmark every line containing marked text</strong>:<br><strong>Mark</strong> commands bookmark every line in which they mark any text.
<li><strong>Bookmark only the first line of each match or selection</strong>:<br>For matches that span multiple lines, <strong>Mark</strong> commands only bookmark the line in which the match begins.
</ul>
<li><strong>Mark commands that unmark before searching also clear bookmarks</strong>:<br>When <strong>Always unmark all text before Mark command</strong> is checked in the <strong>Settings</strong> dialog, <strong>Mark</strong> commands remove all existing marks from text if they find any matches; <strong>Mark in Marked Text</strong> commands always remove existing marks if they find any matches. If this option is checked, these commands also clear bookmarks.
<li><strong>Tools: Mark selected, Mark shown and Remove marks</strong>
<ul>
<li><strong>Do not add or remove bookmarks</strong>:<br>The <strong>Mark selected</strong>, <strong>Mark shown</strong>, <strong>Remove marks from selected text</strong> and <strong>Remove marks from active document</strong> commands on the <strong>Tools</strong> menu do not affect bookmarks.
<li><strong>Add bookmarks but do not remove them</strong>:<br>The <strong>Mark selected</strong> and <strong>Mark shown</strong> commands on the <strong>Tools</strong> menu add bookmarks when they add marks according to the <strong>When bookmarking marked text</strong> setting above. They do not remove bookmarks.<strong> Remove marks from selected text</strong> and <strong>Remove marks from active document</strong> do not affect bookmarks.
<li><strong>Keep bookmarks synchronized with marked text</strong>:<br>The <strong>Mark selected</strong> and <strong>Mark shown</strong> commands on the <strong>Tools</strong> menu add bookmarks when they add marks according to the <strong>When bookmarking marked text</strong> setting above. They clear bookmarks first if right-clicked or if the Shift key is used. <strong>Remove marks from selected text</strong> also removes bookmarks from lines from which it removes all marks, and <strong>Remove marks from active document</strong> also clears bookmarks.
</ul>
</ul></td></tr>
<tr><th><u>J</u>ump to next match after replace</th><th>Ctrl+J</th><td>This is a toggle. When checked, <strong>Replace</strong> commands automatically select and scroll to the next occurrence of the find string after replacing text. When not checked, after text is replaced the replaced text is selected and the document remains scrolled to show the replacement; the next <strong>Replace</strong> command finds the next occurrence, the next replaces, and so on.</td></tr>
<tr><th>Show selected li<u>n</u>es (Shift: all)<hr>Show all li<u>n</u>es</th><th>Ctrl+Q<br>Ctrl+Shift+Q</th><td><p><em>If the current selection includes any part of a hidden line, or if there is no selection and the caret is on a hidden line:</em> shows lines that contain any part of the selection, or the line containing the caret.</p>
<p><em>Otherwise:</em> shows all lines in the active document.</p>
<p class=note>Right-click or use the Shift key with this option to ignore the current selection and show all lines in the active document.</p></td></tr>
<tr><th>Sho<u>w</u> only lines with shown text</th><th>Ctrl+Shift+W</th><td>shows only lines containing text or empty matches with the style used by <strong>Show</strong> commands, and hides all other lines.</td></tr>
<tr><th>Ex<u>p</u>and visible</th><th>Ctrl+P</th><td>When the active document contains both hidden and visible lines: shows the line before and the line after each block of visible lines.</td></tr>
<tr><th>Hi<u>d</u>e all lines</th><th>Ctrl+Shift+D</th><td>hides all lines in the active document.</td></tr>
<tr><th><u>M</u>ark selected text (Shift: clear first)</th><th>Ctrl+M<br>Ctrl+Shift+M</th><td><p>marks selected text with the style used by <strong>Mark</strong> commands.</p><p class=note>Right-click or use the Shift key with this option to remove all marks in the active document first, so that only the selected text is marked.</p><p class=note>If <strong>Bookmark lines when marking text</strong> is checked, depending on your settings in the <strong>Configure bookmarks</strong> dialog this command may also add bookmarks, and the shifted version may clear bookmarks.</p></td></tr>
<tr><th>Mar<u>k</u> shown text (Shift: clear first)</th><th>Ctrl+K<br>Ctrl+Shift+K</th><td><p>marks text which has the style used by <strong>Show</strong> commands with the style used by <strong>Mark</strong> commands.</p><p class=note>Right-click or use the Shift key with this option to remove all marks in the active document first, so that only shown text is marked.</p><p class=note>If <strong>Bookmark lines when marking text</strong> is checked, depending on your settings in the <strong>Configure bookmarks</strong> dialog this command may also add bookmarks, and the shifted version may clear bookmarks.</p></td></tr>
<tr><th>Remove marks from selected te<u>x</u>t<hr>Remove marks and bookmarks from selected te<u>x</u>t</th><th>Ctrl+Shift+X</th><td><p>Removes the style used by <strong>Mark</strong> commands from selected text.</p><p class=note>If <strong>Bookmark lines when marking text</strong> is checked and <strong>Keep bookmarks synchronized with marked text</strong> is selected in the <strong>Configure bookmarks</strong> dialog, <strong>Remove marks and bookmarks from selected text</strong> is shown and this command also removes bookmarks from lines from which all marks are removed.</p></td></tr>
<tr><th>Se<u>l</u>ect marked text</th><th>Ctrl+Shift+S</th><td>selects all text in the active document with the style used by <strong>Mark</strong> commands. Note that this does not add to the current selection; the current selection is lost.</td></tr>
<tr><th><u>I</u>nvert marked text</th><th>Ctrl+Shift+I</th><td>Adds the mark style to text in the active document that doesn’t have it, and removes it from text that does have it.</td></tr>
<tr><th>Synchroni<u>z</u>e marks and bookmarks</th><td colspan=2>Opens a sub-menu containing these commands:
<ul>
<li><strong><u>B</u>ookmark lines with marked text, and clear other bookmarks</strong>:<br>Clears bookmarks, then places a bookmark on every line that contains marked text.
<li><strong>Bookmark <u>v</u>isible lines, and clear other bookmarks</strong>:<br>Clears bookmarks, then places a bookmark on every visible line.
<li><strong><u>M</u>ark all text in bookmarked lines, and clear other marks</strong>:<br>Clears existing marks, then marks all the text (including line ending characters) in every line that has a bookmark.
<li><strong><u>A</u>dd bookmarks to lines with marked text</strong>:<br>Adds a bookmark to every line that contains marked text. No existing bookmarks are removed.
<li><strong>Add mar<u>k</u>s to all text in bookmarked lines</strong>:<br>Marks all the text (including line ending characters) in every line that has a bookmark. No existing marks are removed.
</ul>
<hr>
<p class=note><strong><u>B</u>ookmark lines with marked text, and clear other bookmarks</strong> and <strong><u>A</u>dd bookmarks to lines with marked text</strong> consider a line to contain marked text if any character in the line other than line ending characters is marked, or if the line is empty (has no characters other than line ending characters) and any line ending character is marked.</p>
</td></tr>
<tr><th><u>C</u>opy marked text with no separators
<hr><u>C</u>opy marked text separated by
<br>· blanks
<br>· tabs
<br>· line breaks
<br>· custom string
</th><th>Ctrl+Shift+C</th><td><p>copies to the clipboard all text in the active document with the style used by <strong>Mark</strong> commands as if it were a single selection. The separator, if any, that will be added between separate runs of marked text is indicated; the default is <strong>line breaks</strong>, which you can change using the next menu option.</p><p class=note>Marked text does not separate adjoining matches: if two or more matches have no intervening characters, they constitute a single run of marked text. If you need to keep adjoining matches separate, use <a href="#commands-select">Select</a> rather than <a href="#commands-mark">Mark</a>.</p></td></tr>
<tr><th>Cop<u>y</u> marked text...</th><th>Ctrl+Shift+Y</th><td><p>opens a dialog in which you can choose how you would like separate runs of marked text to be separated, and then copies all marked text in the same way as the option above. The separator you choose becomes the new separator for the menu option above.</p>
<p class=note>If you choose <strong>Custom</strong>, you can enter a string of text you prefer: for example, you might want to use a comma followed by a blank to separate items that will go into a list. You can use <code>\t</code>, <code>\r</code> and <code>\n</code> for tabs, returns and new lines; use <code>\\</code> for a backslash before <code>t</code>, <code>r</code> or <code>n</code>. Note that in practice, you don’t need to worry about how you code a line ending unless you will be pasting somewhere other than Notepad++; when pasting in Notepad++ line endings are always converted to the line ending type set for the active document.</p></td></tr>
<tr><th>Copy marked <u>t</u>ext as multiple selections</th><th>Ctrl+Shift+T</th><td>copies to the clipboard all text in the active document with the style used by <strong>Mark</strong> commands as if it were a multiple selection. This affects how the copied text pastes, since it will paste like a column or multiple selection rather than like a single selection. The separator for multiple selections is always a line break.</td></tr>
<tr><th><u>R</u>emove marks from active document<hr><u>R</u>emove marks and bookmarks from active document</th><th>Ctrl+Shift+R</th><td><p>removes all marks in the style used by <strong>Mark</strong> commands from the active document.</p><p class=note>If <strong>Bookmark lines when marking text</strong> is checked and <strong>Keep bookmarks synchronized with marked text</strong> is selected in the <strong>Configure bookmarks</strong> dialog, <strong>Remove marks and bookmarks from active document</strong> is shown and this command also clears bookmarks.</p></td></tr>
<tr><th>Remo<u>v</u>e marks from multiple documents...</th><th>Ctrl+Shift+V</th><td>opens a dialog with options to remove all marks in the mark style chosen in the <a href="#settings-marked-text">Settings</a> dialog from documents in this view or from all open documents. You might want to use these options along with the <strong>Mark in Documents in this View</strong> or <strong>Mark in Open Documents</strong> commands.</td></tr>
<tr><th>Clear shown (show <u>a</u>ll and clear style)</th><th>Ctrl+Shift+A</th><td>shows all lines and removes the Show style from all text.</td></tr>
<tr><th>Clear search res<u>u</u>lts list</th><th></th><td>removes all results currently accumulated in the search results list.</td></tr>
<tr><th>S<u>e</u>ttings...</th><th>Ctrl+Shift+E</th><td>opens the Search++ <a href="#settings">Settings</a> dialog.</td></tr>
<tr><th>Cl<u>o</u>se</th><th>Ctrl+Shift+O</th><td><p>Closes the main Search dialog.</p><p class=note>This option only appears on the menu shown by the Tools button.</p></td></tr>
</table>
<p>The styles used by <strong>Mark</strong> and <strong>Show</strong> commands can be changed in the <a href="#settings-marked-text">Settings</a> dialog.</p>
</section>
<section id=regular><h2>Regular expressions</h2>
<p>Regular expressions are a powerful tool for finding and replacing text using patterns instead of a literal plain text string. <strong>Search++</strong> uses the same regular expression engine, <a href="https://www.boost.org/doc/libs/latest/libs/regex/">Boost.Regex</a>, used in <strong>Notepad++</strong>, so most things work the same as they do in Notepad++. Two good resources for learning the syntax of find strings and replacements for this engine are the <a href="https://npp-user-manual.org/docs/searching/#regular-expressions">Notepad++ User Manual</a> and the Boost documentation for <a href="https://www.boost.org/doc/libs/latest/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html">Find</a> and <a href="https://www.boost.org/doc/libs/latest/libs/regex/doc/html/boost_regex/format/boost_format_syntax.html">Replace</a> syntax. This section will concentrate on the differences between Search++ regular expressions and the ones used in the built-in Notepad++ search.</p>
<h3 id="regular-formulas">Formulas</h3>
<p><strong>Search++</strong> supports mathematical formulas in the replacement string for regular expressions. They are described in the <a href="#formulas">Formulas</a> section of this help.</p>
<h3 id="regular-marked-rectangular-multiple">Searching marked text and searching in rectangular and multiple selections</h3>
<p>Search in Notepad++ doesn’t work in rectangular or multiple selections, nor is there a facility for searching in marked text. <strong>Search++</strong> can do those things. For plain text the way it works is fairly straightforward; but for regular expressions there are some considerations that might not be obvious.</p>
<p>Within a rectangular selection, the selection in each row is matched independently of the surrounding text. The <strong>^</strong> assertion matches the beginning of the selection within a row, the <strong>$</strong> assertion matches the end of the selection, and lookahead and lookbehind assertions cannot examine text past the boundaries of the selection. (Lookbehind assertions in <strong>Notepad++</strong> can examine all text back to the beginning of the document, even when counting or replacing in a simple selection.) The same principle applies to multiple selections and to runs of marked text.</p>
<h3 id="regular-K">The \K directive</h3>
<p>Matches for regular expressions using the <strong>\K</strong> directive are never replaced when performing stepwise Find and Replace in <strong>Notepad++</strong>. In <strong>Search++</strong> such matches can be replaced if you do not change the selection in the document or activate any other document between finding the match and replacing it.</p>
<h3 id="regular-case">Case sensitivity and named character classes</h3>
<p>In most regular expression engines, including unmodified Boost.Regex, case insensitive matches (when the <strong>Match case</strong> option is not checked, or when <strong>(?i)</strong> is in effect) ignore case in the text to be matched entirely. In <strong>Search++</strong>, named character classes and their equivalents (such as <strong>[[:upper:]]</strong> or <strong>\u</strong> or <strong>\p{Lu}</strong>) never ignore case.</p>
<h3 id="regular-unicode">Unicode</h3>
<p>In documents containing characters outside the <a href="https://en.wikipedia.org/wiki/ASCII#Character_set">ASCII character set</a> there are some significant differences in the way <strong>Search++</strong> and <strong>Notepad++</strong> match regular expressions. <strong>Search++</strong> matches document text as if it were a series of <a href="https://en.wikipedia.org/wiki/Unicode">Unicode</a> code points (i.e., <a href="https://en.wikipedia.org/wiki/UTF-32">UTF-32</a>) while <strong>Notepad++</strong> matches documents either as <a href="https://en.wikipedia.org/wiki/Windows_code_page#ANSI_code_page">ANSI</a> bytes in the system default code page or as <a href="https://en.wikipedia.org/wiki/UTF-16">UTF-16</a> code units. Most of the differences are related to this change.</p>
<p>When using hexadecimal codes (<code>\x<em>hh</em></code> or <code>\x{<em>hhhh</em>}</code>) to specify a character in <strong>Search++</strong> regular expressions, you must use the Unicode code point. Character ranges (e.g., <code>[†-‰]</code>) represent the range of Unicode code points, not the range implied by any code page.</p>
<p class=note>The hexadecimal values for ASCII characters (<code>x00</code>-<code>x7f</code>) are the same in all code pages and in Unicode. There is one partial exception: in some East Asian codepages, <code>¥</code>, the Yen/Yuan sign, shares the byte value <code>x5c</code> with <code>\</code>, the backslash character. This is a matter of appearance only; the Unicode Yen/Yuan sign, <code>xa5</code>, is not an ASCII character, and the ASCII character <code>x5c</code> functions as a backslash whether it appears as <code>\</code> or as <code>¥</code>.</p>
<p class=note>As an example of character ranges, <code>•</code>, the bullet, is included in the Unicode range <code>[†-‰]</code>, from the <a href="https://www.compart.com/en/unicode/block/U+2000">General Punctuation block</a>; but it is not between those two characters in the common <a href="https://en.wikipedia.org/wiki/Windows-1252#Codepage_layout">Windows-1252</a> code page. In a regular expression in <strong>Search++</strong> that range will match a bullet, even in an ANSI document when the system default code page is Windows-1252. In a <strong>Notepad++</strong> search it would not match in an ANSI document, but it would match in a Unicode document.</p>
<p>There are no surrogate pairs in <strong>Search++</strong> regular expressions; each code point matches as a single unit. To enter any Unicode character in hexadecimal notation, use the full code point; for example, enter 🙂 as <code>\x{1f642}</code>. (The surrogate pair, <code>\x{d83d}\x{de42}</code>, which must be used in <strong>Notepad++</strong> search, <em>will not match</em> in <strong>Search++</strong>.)</p>
<p><strong>Scintilla</strong>, the display control used in <strong>Notepad++</strong>, represents Unicode internally as UTF-8. (This is true whether the file containing the document is UTF-8, UTF-16 or anything else other than ANSI.) When displaying Unicode documents that contain invalid UTF-8, Scintilla shows each byte that cannot be decoded as a hexadecimal code in reversed colors. You can match any of these bytes with <code>\i</code>; to match a specific byte, use the hexadecimal code Scintilla displays as a symbolic character name, e.g., <code>[[.xF7.]]</code>. (When matching a regular expression, <strong>Search++</strong> treats each of these error bytes as if it were the Unicode code point formed by adding <code>0xdc00</code> to the invalid byte. These code points are in the surrogate range and are invalid as UTF-32 code units.)</p>
<p>The period (<code>.</code>) matches any one code point except the characters which end lines in Scintilla: carriage return (<code>\x0d</code> or <code>\r</code>) and newline (also called line feed, <code>\x0a</code> or <code>\n</code>). This corresponds to the <a href="https://npp-user-manual.org/docs/searching/#single-character-matches">documented</a> behavior of the period, but not the actual behavior in Notepad++ (where there are several other control characters it does not match). Use <code>\X</code> to match a character including any combining code points (marks) which follow it. (In Notepad++ search, <code>.</code> and <code>\X</code> do not work as expected when the code points involved are outside the basic multilingual plane, that is, 0x10000 or greater.)</p>
<p>The <a href="https://www.boost.org/doc/libs/release/libs/regex/doc/html/boost_regex/syntax/character_classes/optional_char_class_names.html">Unicode character classes</a> and these escape sequences, negations (which match characters not in the class) and character classes are added:</p>
<table>
<tr><th>escape</th><th>negation</th><th>character class</th><th>meaning</th></tr>
<tr><td><code>\i</code></td><td><code>\I</code></td><td><code>[[:invalid:]]</code></td><td>a byte in an invalid UTF-8 sequence</td></tr>
<tr><td><code>\o</code></td><td><code>\O</code></td><td><code>[[:ascii:]]</code></td><td>an ASCII character, code points 0 through 127</td></tr>
<tr><td><code>\y</code></td><td><code>\Y</code></td><td><code>[[:defined:]]</code></td><td>any Unicode code point that is assigned and is not a surrogate or a private use character</td></tr>
</table>
<p>Some symbolic names for <a href="https://www.boost.org/doc/libs/release/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html#boost_regex.syntax.perl_syntax.collating_elements">collating elements</a> have been added, including all the abbreviations used to display invisible characters; all can be entered in any mix of upper and lower case. This is the full list:</p>
<table class=charnames>
<tr><th>expression</th><th>code pt</th><th>common name</th></tr>
<tr><td><code>[[.nul.]]</code></td> <td> 00</td><td>null</td></tr>
<tr><td><code>[[.soh.]]</code></td> <td> 01</td><td>start of heading</td></tr>
<tr><td><code>[[.stx.]]</code></td> <td> 02</td><td>start of text</td></tr>
<tr><td><code>[[.etx.]]</code></td> <td> 03</td><td>end of text</td></tr>
<tr><td><code>[[.eot.]]</code></td> <td> 04</td><td>end of transmission</td></tr>
<tr><td><code>[[.enq.]]</code></td> <td> 05</td><td>enquiry</td></tr>
<tr><td><code>[[.ack.]]</code></td> <td> 06</td><td>acknowledge</td></tr>
<tr><td><code>[[.bel.]]</code><br><code>[[.alert.]]</code></td> <td> 07</td><td>bell</td></tr>
<tr><td><code>[[.bs.]]</code><br><code>[[.backspace.]]</code></td> <td> 08</td><td>backspace</td></tr>
<tr><td><code>[[.ht.]]</code><br><code>[[.tab.]]</code></td> <td> 09</td><td>horizontal tab</td></tr>
<tr><td><code>[[.lf.]]</code><br><code>[[.newline.]]</code></td> <td> 0a</td><td>line feed,<br>new line</td></tr>
<tr><td><code>[[.vt.]]</code><br><code>[[.vertical-tab.]]</code></td> <td> 0b</td><td>line tabulation,<br>vertical tab</td></tr>
<tr><td><code>[[.ff.]]</code><br><code>[[.form-feed.]]</code></td> <td> 0c</td><td>form feed</td></tr>
<tr><td><code>[[.cr.]]</code><br><code>[[.carriage-return.]]</code></td> <td> 0d</td><td>carriage return</td></tr>
<tr><td><code>[[.so.]]</code></td> <td> 0e</td><td>shift out</td></tr>
<tr><td><code>[[.si.]]</code></td> <td> 0f</td><td>shift in</td></tr>
<tr><td><code>[[.dle.]]</code></td> <td> 10</td><td>data link escape</td></tr>
<tr><td><code>[[.dc1.]]</code></td> <td> 11</td><td>device control one</td></tr>
<tr><td><code>[[.dc2.]]</code></td> <td> 12</td><td>device control two</td></tr>
<tr><td><code>[[.dc3.]]</code></td> <td> 13</td><td>device control three</td></tr>
<tr><td><code>[[.dc4.]]</code></td> <td> 14</td><td>device control four</td></tr>
<tr><td><code>[[.nak.]]</code></td> <td> 15</td><td>negative acknowledge</td></tr>
<tr><td><code>[[.syn.]]</code></td> <td> 16</td><td>synchronous idle</td></tr>
<tr><td><code>[[.etb.]]</code></td> <td> 17</td><td>end of transmission block</td></tr>
<tr><td><code>[[.can.]]</code></td> <td> 18</td><td>cancel</td></tr>
<tr><td><code>[[.em.]]</code></td> <td> 19</td><td>end of medium</td></tr>
<tr><td><code>[[.sub.]]</code></td> <td> 1a</td><td>substitute</td></tr>
<tr><td><code>[[.esc.]]</code></td> <td> 1b</td><td>escape</td></tr>
<tr><td><code>[[.fs.]]</code><br><code>[[.IS4.]]</code></td> <td> 1c</td><td>information separator four</td></tr>
<tr><td><code>[[.gs.]]</code><br><code>[[.IS3.]]</code></td> <td> 1d</td><td>information separator three</td></tr>
<tr><td><code>[[.rs.]]</code><br><code>[[.IS2.]]</code></td> <td> 1e</td><td>information separator two</td></tr>
<tr><td><code>[[.us.]]</code><br><code>[[.IS1.]]</code></td> <td> 1f</td><td>information separator one</td></tr>
<tr><td><code>[[.space.]]</code></td> <td> 20</td><td></td></tr>
<tr><td><code>[[.exclamation-mark.]]</code></td> <td> 21</td><td>!</td></tr>
<tr><td><code>[[.quotation-mark.]]</code></td> <td> 22</td><td>"</td></tr>
<tr><td><code>[[.number-sign.]]</code></td> <td> 23</td><td>#</td></tr>
<tr><td><code>[[.dollar-sign.]]</code></td> <td> 24</td><td>$</td></tr>
<tr><td><code>[[.percent-sign.]]</code></td> <td> 25</td><td>%</td></tr>
<tr><td><code>[[.ampersand.]]</code></td> <td> 26</td><td>&</td></tr>
<tr><td><code>[[.apostrophe.]]</code></td> <td> 27</td><td>'</td></tr>
<tr><td><code>[[.left-parenthesis.]]</code></td> <td> 28</td><td>(</td></tr>
<tr><td><code>[[.right-parenthesis.]]</code></td> <td> 29</td><td>)</td></tr>
<tr><td><code>[[.asterisk.]]</code></td> <td> 2a</td><td>*</td></tr>
<tr><td><code>[[.plus-sign.]]</code></td> <td> 2b</td><td>+</td></tr>
<tr><td><code>[[.comma.]]</code></td> <td> 2c</td><td>,</td></tr>
<tr><td><code>[[.hyphen.]]</code></td> <td> 2d</td><td>-</td></tr>
<tr><td><code>[[.period.]]</code></td> <td> 2e</td><td>.</td></tr>
<tr><td><code>[[.slash.]]</code></td> <td> 2f</td><td>/</td></tr>
<tr><td><code>[[.zero.]]</code></td> <td> 30</td><td>0</td></tr>
<tr><td><code>[[.one.]]</code></td> <td> 31</td><td>1</td></tr>
<tr><td><code>[[.two.]]</code></td> <td> 32</td><td>2</td></tr>
<tr><td><code>[[.three.]]</code></td> <td> 33</td><td>3</td></tr>
<tr><td><code>[[.four.]]</code></td> <td> 34</td><td>4</td></tr>
<tr><td><code>[[.five.]]</code></td> <td> 35</td><td>5</td></tr>
<tr><td><code>[[.six.]]</code></td> <td> 36</td><td>6</td></tr>
<tr><td><code>[[.seven.]]</code></td> <td> 37</td><td>7</td></tr>
<tr><td><code>[[.eight.]]</code></td> <td> 38</td><td>8</td></tr>
<tr><td><code>[[.nine.]]</code></td> <td> 39</td><td>9</td></tr>
<tr><td><code>[[.colon.]]</code></td> <td> 3a</td><td>:</td></tr>
<tr><td><code>[[.semicolon.]]</code></td> <td> 3b</td><td>;</td></tr>
<tr><td><code>[[.less-than-sign.]]</code></td> <td> 3c</td><td><</td></tr>
<tr><td><code>[[.equals-sign.]]</code></td> <td> 3d</td><td>=</td></tr>
<tr><td><code>[[.greater-than-sign.]]</code></td> <td> 3e</td><td>></td></tr>
<tr><td><code>[[.question-mark.]]</code></td> <td> 3f</td><td>?</td></tr>
<tr><td><code>[[.commercial-at.]]</code></td> <td> 40</td><td>@</td></tr>
<tr><td><code>[[.left-square-bracket.]]</code></td> <td> 5b</td><td>[</td></tr>
<tr><td><code>[[.backslash.]]</code></td> <td> 5c</td><td>\</td></tr>
<tr><td><code>[[.right-square-bracket.]]</code></td> <td> 5d</td><td>]</td></tr>
<tr><td><code>[[.circumflex.]]</code></td> <td> 5e</td><td>^</td></tr>
<tr><td><code>[[.underscore.]]</code></td> <td> 5f</td><td>_</td></tr>
<tr><td><code>[[.grave-accent.]]</code></td> <td> 60</td><td>`</td></tr>
<tr><td><code>[[.left-curly-bracket.]]</code></td> <td> 7b</td><td>{</td></tr>
<tr><td><code>[[.vertical-line.]]</code></td> <td> 7c</td><td>|</td></tr>
<tr><td><code>[[.right-curly-bracket.]]</code></td> <td> 7d</td><td>}</td></tr>
<tr><td><code>[[.tilde.]]</code></td> <td> 7e</td><td>~</td></tr>
<tr><td><code>[[.del.]]</code></td> <td> 7f</td><td>delete</td></tr>
<tr><td><code>[[.pad.]]</code></td> <td> 80</td><td>padding character</td></tr>
<tr><td><code>[[.hop.]]</code></td> <td> 81</td><td>high octet preset</td></tr>
<tr><td><code>[[.bph.]]</code></td> <td> 82</td><td>break permitted here</td></tr>
<tr><td><code>[[.nbh.]]</code></td> <td> 83</td><td>no break here</td></tr>
<tr><td><code>[[.ind.]]</code></td> <td> 84</td><td>index</td></tr>
<tr><td><code>[[.nel.]]</code></td> <td> 85</td><td>next line</td></tr>
<tr><td><code>[[.ssa.]]</code></td> <td> 86</td><td>start of selected area</td></tr>
<tr><td><code>[[.esa.]]</code></td> <td> 87</td><td>end of selected area</td></tr>
<tr><td><code>[[.hts.]]</code></td> <td> 88</td><td>character (horizontal) tabulation set</td></tr>
<tr><td><code>[[.htj.]]</code></td> <td> 89</td><td>character (horizontal) tabulation with justification</td></tr>
<tr><td><code>[[.lts.]]</code></td> <td> 8a</td><td>line (vertical) tabulation set</td></tr>
<tr><td><code>[[.pld.]]</code></td> <td> 8b</td><td>partial line forward (down)</td></tr>
<tr><td><code>[[.plu.]]</code></td> <td> 8c</td><td>partial line backward (up)</td></tr>
<tr><td><code>[[.ri.]]</code></td> <td> 8d</td><td>reverse line feed (index)</td></tr>
<tr><td><code>[[.ss2.]]</code></td> <td> 8e</td><td>single-shift two</td></tr>
<tr><td><code>[[.ss3.]]</code></td> <td> 8f</td><td>single-shift three</td></tr>
<tr><td><code>[[.dcs.]]</code></td> <td> 90</td><td>device control string</td></tr>
<tr><td><code>[[.pu1.]]</code></td> <td> 91</td><td>private use one</td></tr>
<tr><td><code>[[.pu2.]]</code></td> <td> 92</td><td>private use two</td></tr>
<tr><td><code>[[.sts.]]</code></td> <td> 93</td><td>set transmit state</td></tr>
<tr><td><code>[[.cch.]]</code></td> <td> 94</td><td>cancel character</td></tr>
<tr><td><code>[[.mw.]]</code></td> <td> 95</td><td>message waiting</td></tr>
<tr><td><code>[[.spa.]]</code></td> <td> 96</td><td>start of protected area</td></tr>
<tr><td><code>[[.epa.]]</code></td> <td> 97</td><td>end of protected area</td></tr>
<tr><td><code>[[.sos.]]</code></td> <td> 98</td><td>start of string</td></tr>
<tr><td><code>[[.sgci.]]</code></td> <td> 99</td><td>single graphic character introducer</td></tr>
<tr><td><code>[[.sci.]]</code></td> <td> 9a</td><td>single character introducer</td></tr>
<tr><td><code>[[.csi.]]</code></td> <td> 9b</td><td>control sequence introducer</td></tr>
<tr><td><code>[[.st.]]</code></td> <td> 9c</td><td>string terminator</td></tr>
<tr><td><code>[[.osc.]]</code></td> <td> 9d</td><td>operating system command</td></tr>
<tr><td><code>[[.pm.]]</code></td> <td> 9e</td><td>private message</td></tr>
<tr><td><code>[[.apc.]]</code></td> <td> 9f</td><td>application program command</td></tr>
<tr><td><code>[[.nbsp.]]</code></td> <td> a0</td><td>no-break space</td></tr>
<tr><td><code>[[.shy.]]</code></td> <td> ad</td><td>soft hyphen</td></tr>
<tr><td><code>[[.alm.]]</code></td> <td> 061c</td><td>arabic letter mark</td></tr>
<tr><td><code>[[.sam.]]</code></td> <td> 070f</td><td>syriac abbreviation mark</td></tr>
<tr><td><code>[[.ospm.]]</code></td> <td> 1680</td><td>ogham space mark</td></tr>
<tr><td><code>[[.mvs.]]</code></td> <td> 180e</td><td>mongolian vowel separator</td></tr>
<tr><td><code>[[.nqsp.]]</code></td> <td> 2000</td><td>en quad</td></tr>
<tr><td><code>[[.mqsp.]]</code></td> <td> 2001</td><td>em quad</td></tr>
<tr><td><code>[[.ensp.]]</code></td> <td> 2002</td><td>en space</td></tr>
<tr><td><code>[[.emsp.]]</code></td> <td> 2003</td><td>em space</td></tr>
<tr><td><code>[[.3/msp.]]</code></td> <td> 2004</td><td>three-per-em space</td></tr>
<tr><td><code>[[.4/msp.]]</code></td> <td> 2005</td><td>four-per-em space</td></tr>
<tr><td><code>[[.6/msp.]]</code></td> <td> 2006</td><td>six-per-em space</td></tr>
<tr><td><code>[[.fsp.]]</code></td> <td> 2007</td><td>figure space</td></tr>
<tr><td><code>[[.psp.]]</code></td> <td> 2008</td><td>punctation space</td></tr>
<tr><td><code>[[.thsp.]]</code></td> <td> 2009</td><td>thin space</td></tr>
<tr><td><code>[[.hsp.]]</code></td> <td> 200a</td><td>hair space</td></tr>
<tr><td><code>[[.zwsp.]]</code></td> <td> 200b</td><td>zero-width space</td></tr>
<tr><td><code>[[.zwnj.]]</code></td> <td> 200c</td><td>zero-width non-joiner</td></tr>
<tr><td><code>[[.zwj.]]</code></td> <td> 200d</td><td>zero-width joiner</td></tr>
<tr><td><code>[[.lrm.]]</code></td> <td> 200e</td><td>left-to-right mark</td></tr>
<tr><td><code>[[.rlm.]]</code></td> <td> 200f</td><td>right-to-left mark</td></tr>
<tr><td><code>[[.ls.]]</code></td> <td> 2028</td><td>line separator</td></tr>
<tr><td><code>[[.ps.]]</code></td> <td> 2029</td><td>paragraph separator</td></tr>
<tr><td><code>[[.lre.]]</code></td> <td> 202a</td><td>left-to-right embedding</td></tr>
<tr><td><code>[[.rle.]]</code></td> <td> 202b</td><td>right-to-left embedding</td></tr>
<tr><td><code>[[.pdf.]]</code></td> <td> 202c</td><td>pop directional formatting</td></tr>
<tr><td><code>[[.lro.]]</code></td> <td> 202d</td><td>left-to-right override</td></tr>
<tr><td><code>[[.rlo.]]</code></td> <td> 202e</td><td>right-to-left override</td></tr>
<tr><td><code>[[.nnbsp.]]</code></td> <td> 202f</td><td>narrow no-break space</td></tr>
<tr><td><code>[[.mmsp.]]</code></td> <td> 205f</td><td>medium mathematical space</td></tr>
<tr><td><code>[[.wj.]]</code></td> <td> 2060</td><td>word joiner</td></tr>
<tr><td><code>[[.(fa).]]</code></td> <td> 2061</td><td>function application</td></tr>
<tr><td><code>[[.(it).]]</code></td> <td> 2062</td><td>invisible times</td></tr>
<tr><td><code>[[.(is).]]</code></td> <td> 2063</td><td>invisible separator</td></tr>
<tr><td><code>[[.(ip).]]</code></td> <td> 2064</td><td>invisible plus</td></tr>
<tr><td><code>[[.lri.]]</code></td> <td> 2066</td><td>left-to-right isolate</td></tr>
<tr><td><code>[[.rli.]]</code></td> <td> 2067</td><td>right-to-left isolate</td></tr>
<tr><td><code>[[.fsi.]]</code></td> <td> 2068</td><td>first strong isolate</td></tr>
<tr><td><code>[[.pdi.]]</code></td> <td> 2069</td><td>pop directional isolate</td></tr>
<tr><td><code>[[.iss.]]</code></td> <td> 206a</td><td>inhibit symmetric swapping</td></tr>
<tr><td><code>[[.ass.]]</code></td> <td> 206b</td><td>activate symmetric swapping</td></tr>
<tr><td><code>[[.iafs.]]</code></td> <td> 206c</td><td>inhibit arabic form shaping</td></tr>
<tr><td><code>[[.aafs.]]</code></td> <td> 206d</td><td>activate arabic form shaping</td></tr>
<tr><td><code>[[.nads.]]</code></td> <td> 206e</td><td>national digit shapes</td></tr>
<tr><td><code>[[.nods.]]</code></td> <td> 206f</td><td>nominal digit shapes</td></tr>
<tr><td><code>[[.idsp.]]</code></td> <td> 3000</td><td>ideographic space</td></tr>
<tr><td><code>[[.zwnbsp.]]</code></td> <td> feff</td><td>zero-width no-break space</td></tr>
<tr><td><code>[[.iaa.]]</code></td> <td> fff9</td><td>interlinear annotation anchor</td></tr>
<tr><td><code>[[.ias.]]</code></td> <td> fffa</td><td>interlinear annotation separator</td></tr>
<tr><td><code>[[.iat.]]</code></td> <td> fffb</td><td>interlinear annotation terminator</td></tr>
<tr><td><code>[[.sflo.]]</code></td> <td>1bca0</td><td>shorthand format letter overlap</td></tr>
<tr><td><code>[[.sfco.]]</code></td> <td>1bca1</td><td>shorthand format continuing overlap</td></tr>
<tr><td><code>[[.sfds.]]</code></td> <td>1bca2</td><td>shorthand format down step</td></tr>
<tr><td><code>[[.sfus.]]</code></td> <td>1bca3</td><td>shorthand format up step</td></tr>
<tr><td><code>[[.x80.]], [[.x81.]],... [[.xff.]]</code></td> <td> </td><td>specific invalid UTF-8 bytes</td></tr>
</table>
</section>
<section id=formulas><h2>Formulas</h2>
<p><strong>Formulas</strong> are representations of mathematical computations. <strong>Search++</strong> uses the <a href="https://github.com/ArashPartow/exprtk">ExprTk (Expression Toolkit)</a> package to parse and evaluate formulas.</p>
<h3 id="formulas-replacement">Replacement syntax</h3>
<p>To include a formula in a replacement string, write it as:</p>
<p><strong>(?=<em>formula</em>)</strong> or <strong>(?=<em>format</em>:<em>formula</em>)</strong></p>
<p>within an ordinary replacement string. (The <em>format</em> option will be explained in a later sub-section.) For example:</p>
<p><strong>Find box:</strong> <code>EM(\l)(\d\d\d)</code>
<br><strong>Replace box:</strong> <code>EX$1(?=$2+100)v</code>
<br>would replace <code>EMj437</code> with <code>EXj537v</code>.</p>
<p>Use <code>$1</code>, <code>$2</code> and so on to represent capture groups; use <code>$</code> or <code>$0</code> to represent the entire match. Only matches and capture groups that can be interpreted as numbers will work within formulas. Number parsing is fairly flexible, including recognition of commas, spaces or apostrophes as thousands separators. For numbers that use a comma as the decimal separator, use two dollar signs (<code>$$</code>, <code>$$1</code>, etc.).</p>
<p><strong>Search++</strong> formulas can recognize numbers formatted as times, using colons to separate days, hours, minutes and seconds. The last segment is always seconds, and the value is interpreted as seconds; e.g., <code>1:23</code> is the same as <strong>83</strong> and <code>1:00:00</code> is interpreted as <strong>3600</strong>.</p>
<p><strong>Search++</strong> represents numeric values internally as <a href="https://en.wikipedia.org/wiki/Double-precision_floating-point_format">double precision floating point</a>
numbers. Any number up to 9,007,199,254,740,992 without a fraction or
decimal, positive or negative, is represented exactly. Most fractions
and decimals cannot be represented exactly, but in ordinary use,
rounding to a reasonable number of decimal places (so that the total
number of digits before and after the decimal is under 15) will make
discrepancies irrelevant. Numeric results which exceed
9,007,199,254,740,992 in absolute value are represented in <a href="https://en.wikipedia.org/wiki/Scientific_notation">scientific notation</a>.</p>
<p>Wherever a numeric value is used, it is also possible for the value to be <em>Not-a-Number</em>, an indication that something which was expected to produce a number failed to do so. This can happen because you tried to get a number from the document, but the associated text could not be unambiguously interpreted as a number. It can also be the result of an undefined mathematical operation, such as dividing by zero. In most cases, if any of the inputs to an operation or function are <em>Not-a-Number</em>, the result is also <em>Not-a-Number</em>. When the result of a formula is <em>Not-a-Number</em>, <strong>Search++</strong> does not insert any text, and no error message is provided.</p>
<p>Two special variables are defined. Use <code>match</code> to substitute a counter that begins at one for the first replacement and increases by one for each additional replacement. (Note that if you are using stepwise replacement, despite the name, the counter only counts <em>replacements</em>, not matches. The counter continues through stepwise replaces, but resets after a Replace All or whenever the replace string is modified.) Use <strong>line</strong> to represent the line number in the document where the match begins.</p>
<h3 id="formulas-format">Format specifications</h3>
<p>You can control how the result of a formula is presented by including a format specification:
<br><strong>(?=<em>format</em>:<em>formula</em>)</strong>
<br>before the formula.</p>
<table id=formatFormula>
<tr><th colspan=2 class=group>Format specifications for Search regular expression replacement formulas</th></tr>
<tr><td colspan=2><em>When a format is not specified, the default is </em><strong>1.-6</strong><em> (up to six decimals, suppress trailing zeros, suppress decimal separator if nothing follows, no leading zeros except that a digit is required before the decimal point).</em></td></tr>
<tr><th><em>n</em></th><td>
One or two digits specify the minimum number of integer digits to be shown (i.e., shorter values will be left-padded with zeros); <strong>0</strong> indicates that a leading zero is not required for decimals. If omitted, the default is <strong>1</strong>.
</td></tr>
<tr><th>t</th><td>
The letter <strong>t</strong> specifies that the result of the formula will be shown in time format. The value is interpreted as seconds and displayed as minutes:seconds or hours:minutes:seconds. If <strong><em>n</em></strong> is used it must appear before <strong>t</strong>; <strong><em>n</em></strong> then applies to the leftmost time segment in each result, regardless of what time unit that represents.</td></tr>
<tr><td><strong>.</strong><br><strong>,</strong></td><td>A period or a comma indicates that decimal places can be shown, using the specified decimal separator. When a format is specified without a decimal indicator, decimals are rounded and not shown. If a decimal indicator is present but no additional specification follows, the default is <strong>.-6</strong> (up to six decimal places, suppress trailing zeros, suppress decimal separator if nothing follows).</td></tr>
<tr><td><strong>,.</strong><br><strong>.,</strong></td><td>A comma <em>and</em> a period indicate that a thousands separator should be used: the first mark is the thousands separator and the second mark is the decimal separator.</td></tr>
<tr><td colspan=2><em>One of the following can follow the decimal or thousands/decimal indicator if it is specified:</em></td></tr>
<tr><td><strong><em>d</em></strong></td><td>
one or two digits specifying the exact number of decimal places to be shown
</td></tr>
<tr><td><strong>-<em>d</em></strong></td><td>
one or two digits specifying the maximum number of decimal places to be shown, omitting any trailing zeros and decimal separator
</td></tr>
<tr><td><strong><em>m</em>-<em>d</em></strong></td><td>
Up to <strong><em>d</em></strong> decimal places will be shown, but no fewer than <strong><em>m</em></strong>. If <strong><em>m</em></strong> is <strong>0</strong>, all decimal places will be omitted if they are zeros, but the decimal separator will still be shown.
</td></tr>
</table>
<h3 id="formulas-syntax">Syntax of formulas</h3>
<p>Formulas are written using most of the common conventions for writing mathematical expressions in typical programming languages: numbers are written with an optional minus sign, digits and an optional decimal point (no commas); <strong>+</strong>, <strong>-</strong>, <strong>*</strong>, <strong>/</strong>, <strong>%</strong> and <strong>^</strong> indicate addition, subtraction, multiplication, division, remainder and exponentiation; parentheses are used to indicate order of operations. You can also use logical expressions built from common operators, including <strong>=</strong> or <strong>==</strong>, <strong>!=</strong> or <strong><></strong>, <strong><</strong>, <strong><=</strong>, <strong>></strong>, <strong>>=</strong>, <strong>&</strong> and <strong>|</strong>, in a conditional expression:</p>
<table>
<tr><th><em>test</em> ? <em>option1</em> : <em>option2</em></th><td>yields <strong><em>option1</em></strong> if <strong><em>test</em></strong> is true, <strong><em>option2</em></strong> if <strong><em>test</em></strong> is false</td></tr>
</table>
<p>so <code>$1>10?$2:1</code> yields the value of the second capture group if the value of the first capture group is greater than 10, and otherwise yields 1.</p>
<p>Formulas can use the many functions built into ExprTk, including these common mathematical functions:</p>
<table>
<tr><th>abs</th><td>absolute value</td></tr>
<tr><th>avg</th><td>average of any number of values</td></tr>
<tr><th>ceil</th><td>smallest integer greater than or equal to</td></tr>
<tr><th>erf</th><td>error function</td></tr>
<tr><th>erfc</th><td>complimentary error function</td></tr>
<tr><th>exp</th><td>e to the power of the given value</td></tr>
<tr><th>floor</th><td>largest integer less than or equal to</td></tr>
<tr><th>frac</th><td>fractional (decimal) part</td></tr>
<tr><th>hypot</th><td>hypotenuse of a right triangle from two sides (eg: hypot(x,y) = sqrt(x*x + y*y))</td></tr>
<tr><th>log</th><td>natural logarithm</td></tr>
<tr><th>log10</th><td>base 10 logarithm</td></tr>
<tr><th>log2</th><td>base 2 logarithm</td></tr>
<tr><th>max</th><td>largest of any number of values</td></tr>
<tr><th>min</th><td>smallest of any number of values</td></tr>
<tr><th>ncdf</th><td>normal cumulative distribution function</td></tr>
<tr><th>round</th><td>round to the nearest integer</td></tr>
<tr><th>roundn</th><td>round the first argument to the number of decimal places specified by the second argument</td></tr>
<tr><th>sqrt</th><td>square root</td></tr>
<tr><th>trunc</th><td>integer part (round down)</td></tr>
</table>
<p>and trigonometric functions (in all cases, angles are expressed in radians):</p>
<table>
<tr><th>acos</th><td>arc cosine; interval [-1,+1]</td></tr>
<tr><th>acosh</th><td>inverse hyperbolic cosine</td></tr>
<tr><th>asin</th><td>arc sine; interval [-1,+1]</td></tr>
<tr><th>asinh</th><td>inverse hyperbolic sine</td></tr>
<tr><th>atan</th><td>arc tangent; interval [-1,+1]</td></tr>
<tr><th>atan2</th><td>two-argument arc tangent; interval [-pi,+pi]</td></tr>
<tr><th>atanh</th><td>inverse hyperbolic tangent</td></tr>
<tr><th>cos</th><td>cosine</td></tr>
<tr><th>cosh</th><td>hyperbolic cosine</td></tr>
<tr><th>cot</th><td>cotangent</td></tr>
<tr><th>csc</th><td>cosecant</td></tr>
<tr><th>deg2grad</th><td>convert from degrees to gradians</td></tr>
<tr><th>deg2rad</th><td>convert from degrees to radians</td></tr>
<tr><th>grad2deg</th><td>convert from gradians to degrees</td></tr>
<tr><th>rad2deg</th><td>convert from radians to degrees</td></tr>
<tr><th>sec</th><td>secant</td></tr>
<tr><th>sin</th><td>sine</td></tr>
<tr><th>sinc</th><td>sine cardinal</td></tr>
<tr><th>sinh</th><td>hyperbolic sine</td></tr>
<tr><th>tan</th><td>tangent</td></tr>
<tr><th>tanh</th><td>hyperbolic tangent</td></tr>
</table>
<p>ExprTk expressions have many more features which are described in Sections 8, 12, 13 and 20 of the <a href="https://github.com/ArashPartow/exprtk#readme">documentation</a> for ExprTk.</p>
</section>
<section id=searchinfiles><h2>Search in Files</h2>
<p>The <strong>Search in Files</strong> dialog lets you search files on disk without first loading them into Notepad++. Results are displayed in the <a href="#results">Search++ results window</a>. You can open the Search in Files dialog from the <strong>Tools</strong> button menu or from the Search++ plugin menu; these actions also switch focus to the dialog if it is already open. You can drag the sides of the dialog to make it wider and/or taller, but you can’t dock it.</p>
<p>The text entry boxes in the Search in Files dialog (Folder, Filter, Find and Replace) are similar to the <a href="#search-boxes" class=wrappable>Find and Replace boxes</a> in the main Search dialog, and they have similar context menus and shortcuts. The <strong>Copy Find (Ctrl+F)</strong> and <strong>Copy Replace (Ctrl+R)</strong> actions on the <strong>Insert/Exchange</strong> sub-menus copy the from the Find and Replace boxes on the <em>main</em> Search dialog.</p>
<p>The <a href="#search-keyboard">general navigation</a> keyboard shortcuts described for the main Search dialog also work in the Search in Files dialog.</p>
<p>There are three sections in the Search in Files dialog. The top section lets you specify which files to search. The middle section specifies the details of the search and begins the search, cancels it or closes the dialog. At the bottom there is a list which tracks the files being searched and the progress in each.</p>