Notepad++

Show Hidden Characters, Spaces, and Line Endings in Notepad++

Show Hidden Characters, Spaces, and Line Endings in Notepad++

Notepad++ shows hidden characters from the View menu. Point to Show Symbol and click Show All Characters. Spaces turn into dots, tabs into arrows, and line endings into CR, LF or CR LF boxes, while the file itself stays untouched, not a single byte changed.

Behind the scenes, that click ticks Show Space and Tab, Show End of Line, Show Non-Printing Characters, and Show Control Characters & Unicode EOL all at once.

Show Non-Printing Characters alone covers 43 code points in the Notepad++ user manual’s table (2026), the no-break space and the zero-width space among them. A byte order mark at the start of a file still never shows up in the editor.

How to Turn On Hidden Characters in Notepad++

YouTube player

Open the View menu, point to Show Symbol, and click Show All Characters. Notepad++ then draws every space, tab, line ending and boxed control code in the current file. Click the same item a second time and they all disappear again.

  1. Open the file you want to inspect.
  2. Click View in the menu bar.
  3. Point to Show Symbol.
  4. Click Show All Characters. A checkmark appears next to the item, and the pilcrow button on the toolbar switches to its active state.
  5. Click the same item again to turn the display off.

Nothing is written to the file. The user manual states that the underlying characters stay as they are and only the rendering changes.

What the View menu entry does

Each item in the Show Symbol submenu toggles on its own, and a checkmark means that symbol is visible. Show All Characters flips the four character options together, per the Notepad++ user manual. Check all four by hand and it checks itself. Uncheck any one of them and it clears.

The pilcrow toolbar button

The pilcrow button (the paragraph-mark icon) runs the same command as Show All Characters, and its active or inactive look follows the menu checkmark.

One quirk came up in the v8.5.3 release thread on the Notepad++ community forum (2023). A second click hides every symbol at once, line endings included, so the button can’t drop only the end-of-line labels. For that, go through the menu.

Turning the display off or assigning a shortcut

To hide everything, click Show All Characters again or press the pilcrow button. To hide a single type, uncheck that option in the submenu. The user manual lists no default keyboard shortcut for the toggle, though Settings > Shortcut Mapper lets you assign one.

What Each Show Symbol Option Displays

YouTube player

As of November 2026, Show All Characters is really just a master switch for the other options in the Show Symbol submenu, and each of those draws its own class of character.

OptionWhat it drawsUse it when
Show Space and TabDot for a space, arrow for a tabChecking indentation and line ends
Show End of LineCR, LF or CR LF in small boxesChecking the line ending format
Show Non-Printing CharactersBoxed code point or abbreviation (NBSP, ZWSP)Pasted web text, odd gaps, searches that miss
Show Control Characters & Unicode EOLBoxed C0 and C1 control codes, LS and PSFiles with NUL, ETX or other stray codes
Show All CharactersAll four options above at onceA first look at an unfamiliar file

The boxed-character options carry the most detail. Show Non-Printing Characters covers 43 code points in the user manual’s table, running from U+0085 (NEL) to U+FEFF (ZWNBSP). That includes the no-break space (NBSP, U+00A0) and the zero-width space (ZWSP, U+200B).

Show Control Characters & Unicode EOL handles the C0 and C1 control codes, along with the Unicode line separator (LS) and paragraph separator (PS).

Whether each box shows the code point or an abbreviation such as NBSP is set under Settings > Preferences > Editing 2 > Non-Printing Characters.

Older answers use older names. High-scoring Stack Overflow replies call the first option Show White Space and TAB, and they predate the boxed-character options. Show Non-Printing Characters arrived with the show non-printable characters command in v8.5 (Notepad++ v8.5 change log). Show Control Characters & Unicode EOL followed in v8.5.3 (user manual).

In the v8.5.3 release thread on the community forum (2023), one user reported that non-printing and control characters stopped showing by default. A forum regular answered that both options are checked by default in that release. If boxed codes are missing in your build, open the submenu and check both.

New to Notepad++ or just need a quick reference? Essential shortcuts, regex for Find & Replace, and advanced editing - including Ctrl+H, Column Mode, and Macro Recorder - is on one page in the Notepad++ Cheat Sheet.

Show Indent Guide and Show Wrap Symbol sit in the same submenu, but they draw guides and a wrap arrow, not characters.

How to Tell Spaces From Tabs and Spot Trailing Whitespace

Show Space and Tab draws a centered dot for each space and a right-pointing arrow for each tab. The arrow stretches across the full width of the tab, so a tab is hard to mistake for a run of spaces.

How tab width changes what you see

A tab ends at the next tab stop, so its width depends on the tab size of the active language (Settings > Preferences > Indentation, under Indent size). With a tab size of 4, a tab typed anywhere in columns 1 to 4 pushes the next character to column 5. That’s why a short arrow and a long arrow can leave the text looking identical.

Show Indent Guide adds a dotted vertical line at each tab stop, which helps when the arrows are hard to count.

Spotting trailing and mixed whitespace

Dots after the last visible character on a line are trailing spaces, and an arrow at the very end of a line is a trailing tab. Mixed indentation shows up as an arrow and dots at the start of the same line.

A line that looks blank but holds only dots is not empty.

Where tabs versus spaces break a file

YAML 1.2.2 (October 2021) bars tabs from indentation in section 6.1 but allows them as separators within a line in section 6.2. The GNU Make manual goes the other way and requires each recipe line to start with a tab, unless .RECIPEPREFIX sets a different character.

The two formats pull in opposite directions. In a YAML file, an arrow at the start of a line is the bug. In a Makefile, a row of dots in that position is.

GNU Make’s error appendix names space-indented recipe lines as a common cause of its separator error, and it blames editors that swap tabs for spaces.

How to Check and Change Line Endings (CRLF, LF, CR)

YouTube player

The status bar names the current file’s line ending, and Show End of Line draws a CR, LF or CR LF label at the end of each line. To change the format, use Edit > EOL Conversion.

The three formats

Windows files use CR LF, which means two characters per line break, drawn as a CR box followed by an LF box. Unix uses a single LF. The Macintosh format is a single CR per line break, and only old Macintosh systems still rely on it.

Reading the labels on screen

With Show End of Line on, each carriage return appears as a CR box and each line feed as an LF box. A file with mixed endings shows different labels on different lines.

Show Control Characters & Unicode EOL adds two more line-break characters, the Unicode line separator (LS) and paragraph separator (PS), which no CR or LF label covers.

Converting and fixing mixed endings

Edit > EOL Conversion converts every line in the current file to Windows (CR LF), Unix (LF) or Macintosh (CR). Right-clicking the line ending indicator in the status bar gets you to the same fix.

If the format you want is greyed out, pick any other format first, then switch back to the one you want. The stray endings convert on the second pick.

Check the status bar before sorting. According to the user manual, Remove Duplicate Lines and most sort commands assume uniform line endings (Locale sorts are the exception). Skip that check and the result may not match what you see on screen.

Which Invisible Characters Does Notepad++ Not Display?

Not many, but the ones it misses cause the most confusion. A byte order mark (BOM) at the start of a file never appears in the editor, and characters with no entry in the user manual’s non-printing table, such as the soft hyphen (U+00AD), get no box.

Sources disagree on whether Show All Characters reveals everything. An August 2022 comment on a Stack Overflow answer says the option does not show everything, and the answer it links to reports U+200B, U+FEFF and U+00A0 staying invisible with the option on. The current user manual (checked November 2026) lists all three among the characters it boxes.

The disagreement is a version gap. The show non-printable characters command arrived in v8.5 (Notepad++ v8.5 change log), after that comment, and before it Notepad++ left a zero-width space to the font, which usually draws nothing (Notepad++ community forum, 2017).

Characters with no box

These stay invisible even with everything switched on:

  • A leading BOM, which Notepad++ treats as metadata and keeps out of the editor panel, so no symbol can show (user manual)
  • The soft hyphen (U+00AD), absent from the manual’s table
  • Invisible math operators (U+2061 to U+2064), meaning function application, invisible times, invisible separator and invisible plus
  • Interlinear annotation marks (U+FFF9 to U+FFFB), which are anchor, separator and terminator

A 2021 analysis by forum contributor guy038, built from the Unicode Character Database file UnicodeData.txt, found 178 characters in the Cf (format) and Zs (space separator) categories and shortlisted 50 worth detecting.

Set against the manual’s table, that shortlist adds, among others, U+2061 to U+2064, U+FFF9 to U+FFFB and four shorthand format characters (U+1BCA0 to U+1BCA3). Those are the ones to search for by code point.

Ways to detect them anyway

The quickest check needs no tools at all. Step through the text with the arrow keys, and the caret takes an extra keypress to cross a zero-width character. A Stack Overflow answer and a forum report both describe this. It proves something is there without saying what.

For a BOM, look at the Encoding menu, which shows a UTF-8-BOM or UTF-16 entry when the file carries one. Convert to UTF-8 removes the BOM, and Convert to UTF-8-BOM adds one.

Convert to ANSI is a blunt option. Community answers describe characters with no ANSI equivalent turning into question marks. The conversion rewrites the file’s bytes, so run it on a copy, and as of v8.8.8 the entry is disabled when the Windows setting Use Unicode UTF-8 for worldwide language support is on.

The Hex-Editor plugin, installed through Plugins > Plugins Admin, shows raw bytes, and a zero-width space reads E2 80 8B in UTF-8. For UTF-16 and character-set files, Notepad++ edits the text as UTF-8 internally, so the plugin can report those internal bytes instead of the file’s, according to the manual.

Custom labels with PythonScript

The PythonScript plugin can attach a label to any code point. A call such as editor.setRepresentation(u'\u200B', "ZWSP") gives the zero-width space a box of its own, using a Scintilla function (Scintilla is the editing component Notepad++ is built on).

There’s a catch, though. A label set this way vanishes when you switch tabs. Forum contributor Alan Kilborn published a script that reapplies the labels on every tab activation.

For a one-off file, a search is quicker. For daily work on pasted web text, the script earns its setup.

How to Find and Remove Hidden Characters

Search for the character, then delete or replace it. Extended mode handles tabs and line breaks, regular expression mode reaches any character by code point, and the Edit menu’s Blank Operations trim spaces and tabs only.

CharacterSearch modePattern
TabExtended\t
No-break space (U+00A0)Regular expression\x{00A0}
Zero-width space (U+200B)Regular expression\x{200B}
Soft hyphen (U+00AD)Regular expression\x{00AD}
Spacing and format marks, BOM inside textRegular expression[\x{2000}-\x{200F}\x{202A}-\x{202F}\x{205F}-\x{206F}\x{FEFF}]

Leave Replace with empty to delete the match. The manual treats a zero-length replacement as a deletion.

Search with Extended mode

Extended mode reads \t, \r, \n and \0 as tab, carriage return, line feed and NUL. It also takes \xNN for a byte and \u followed by four hex digits for a Unicode character.

Typed in Normal mode, the same pattern searches for a literal backslash.

Search with regular expressions

Regular expression mode runs the Boost engine. There, \x{NNNN} matches a code point from U+0000 to U+FFFF in Unicode encodings only (UTF-8 and UTF-16), while in an ANSI file \xNN covers 0 to 255.

Two traps are worth knowing about. The [[:cntrl:]] class covers codes 0 to 31, 127 and five C1 values, so it never matches U+200B, a gap guy038 flagged on the forum and the manual’s class definition confirms. And a lone carriage return needs a lookahead, \r(?!\n), because a plain \r also matches the first half of every Windows line break.

Pasting invisible characters into Find what hides them from you. Since v8.9.1, the Find dialog’s status bar warns when pasted Find what or Replace with text contains them, because those fields cannot display them.

No warning appears when Find what fills itself from a selection.

Mark matches before deleting anything

  • Count in the Find dialog reports the total in its status line.
  • Mark All (Search > Mark, Ctrl+M) highlights each match, and a zero-width one shows as a thin mark.
  • Find All in Current Document lists every hit with its line number in the Search results window.
  • Find in Files runs the same pattern across a folder (set Directory and Filters). Run Replace in Files only after the pattern is proven on a single file.

Clean up with Blank Operations

Trim Trailing Space removes spaces and tabs at the end of each line. Trim Leading Space does the same at the start of each line, and Trim Leading and Trailing Spaces does both.

TAB to Space replaces each tab with enough spaces to reach the next tab stop, based on the language’s tab size. Space to TAB (Leading) converts only the spaces before the first non-blank character, while Space to TAB (All) converts spaces anywhere on the line.

The user manual lays out a few limits. The commands cover the whole document unless a single stream selection exists, a column-mode selection blocks trimming and tab conversion entirely, and a multi-stream selection affects only the last selection added.

They also ignore anything that is not a space or a tab. In one forum case, non-breaking spaces left stray gaps between words that Trim Leading and Trailing Space could not touch, until a \xA0 search found them.

For a fixed number of spaces per tab, skip TAB to Space and replace \t with that many spaces in Extended mode.

How to Change How the Symbols Look

Change symbol colors in Settings > Style Configurator under Language: Global Styles, and change how line ending labels and boxed characters render in the Editing 2 tab of Settings > Preferences.

  1. Open Settings > Style Configurator.
  2. Set Language to Global Styles.
  3. Pick White space symbol in the Style list.
  4. Choose a foreground color, then click Save & Close.

White space symbol is a foreground-only style, so the dots and tab arrows take a color but no background. The same style colors the arrow that Show Wrap Symbol draws on wrapped lines.

The EOL group in Settings > Preferences > Editing 2 offers Default, which draws CR and LF in reverse-video boxes, and Plain Text, where the labels look like ordinary text. Custom Color opens the Style Configurator at EOL Custom Color, which takes both a foreground and a background.

Non-Printing Characters has its own Custom Color, backed by the Non-printing characters Custom Color style. Its Apply to C0, C1 & Unicode EOL checkbox extends the same appearance settings to control codes and the LS and PS characters.

With custom color off, the boxes follow the Default style, so a theme switch recolors them too.

Hidden Characters in Notepad++ FAQ

Does Notepad++ remember the Show Symbol setting?

Yes. The user manual marks Show Symbol as a remembered setting, so your choice survives a restart.

The manual says Zoom acts on the current View only, but it makes no such statement for Show Symbol.

Why does a shell script fail on Linux when it looks correct in Notepad++?

A Windows line ending leaves a carriage return at the end of every line. On the first line, that carriage return becomes part of the interpreter name, so the system cannot find it.

Show End of Line labels the ending as CR LF, which gives it away before you upload the file.

Why does a CSV import read the first column name wrongly?

YouTube player

A UTF-8 byte order mark sits ahead of the first header, and some importers treat it as part of the name. Notepad++ never draws it in the editor, so the file looks clean.

The UTF-8-BOM entry in the Encoding menu is where it shows up.

Why does a character appear as a box with a question mark?

The active font has no glyph for that character, as a forum contributor explained in 2017.

The Direct Write rendering mode in Settings > Preferences > MISC. helps display characters even when the font lacks a glyph, and DirectWrite is the default on new installations.

How do control characters end up in a document by accident?

An unmapped Ctrl combination, such as Ctrl+E, can insert the matching ASCII control character.

Checking Prevent control character (C0 code) typing into document in the Editing 2 tab of Settings > Preferences blocks it.

Keeping Wrong Line Endings Out of New Files

Hidden characters in Notepad++ stay out of new files when the New Document preferences match the system that will read them. The Format group sets the line ending (Windows CR LF, Unix LF or Macintosh CR), and the Encoding group sets whether a BOM gets written.

The defaults apply to newly created files only, so a file already on disk keeps its endings. Choose Unix (LF) for anything that runs on Linux.

UTF-8 beats UTF-8 with BOM unless a receiving application demands the mark. The BOM helps programs that detect UTF-8 by it, but it costs scripts and CSV headers an invisible U+FEFF.

The Apply to opened ANSI files checkbox upgrades ANSI files to UTF-8 on open. This advice follows the user manual, which covers Notepad++ up to v8.9.9 and was checked in November 2026, and a release that moves these options would change it.

Bogdan Sandu

Stay sharp. Ship better code.

Every week: one curated article, one tool worth knowing, one tip you can use tomorrow. No noise, no padding.