How to show invisible characters on Mac
You can do this with Note My. Here is how to make the whitespace visible, what each marker means, and why turning the display on never touches the file itself.
Two lines look the same. One is indented with a tab and the other with four spaces, or there is a trailing space before the newline, or the file mixes Windows line endings with Unix ones and something downstream is complaining. You cannot debug what you cannot see. This guide covers how to draw the whitespace on screen in Note My, what each marker means, and — the part people get wrong — why showing invisible characters is not the same operation as removing them.
Everything here is display. Turning the markers on shows you what is already in the file: no characters are added to the document, and nothing you see reaches what you save. It all happens on your Mac — nothing is uploaded, there is no account, and the file never leaves the machine.
Turn the display on
-
Click Show Invisibles in the toolbar
The toolbar carries a Show Invisibles toggle — its tooltip reads "Show spaces, tabs and line endings". One click and spaces, tabs and line endings appear in the text. A latched toggle in this toolbar is drawn as a solid accent disc with a white glyph, so you can tell at a glance whether the display is on.
The View menu carries the same display in parts: View ▸ Show Whitespace and View ▸ Show End of Line give you those two parts on their own, and View ▸ Show All Characters is the combined item.
-
Open Settings ▸ Invisibles for the detail
Press ⌘, and choose Invisibles — one of the fourteen panes down the sidebar, in the same group as Guides and Ruler. This is where the four display switches and the marker style live. The sidebar search field covers every row, so typing "whitespace" takes you straight to them.
-
Choose which of the four things you want drawn
They are independent switches, and all four are off until you turn them on. Turn on only what you are looking for — all four at once is a great deal of ink over a page of code. Start with the switch that matches the problem in front of you.
-
Pick a marker style
Symbols is the default and the one to keep for everyday work. Code Points and Bytes exist for the times when a quiet dot is not enough and you need to know exactly which character you are looking at.
The four switches, and what each one draws
| Switch | What appears | Default |
|---|---|---|
| Show whitespace | A middle dot · for a space, an arrow → for a tab, and a ring around a non-breaking space | Off |
| Show end of line | An LF, CRLF or CR label at the end of each line | Off |
| Highlight trailing whitespace | A translucent wash over the run of spaces or tabs before a line ending | Off |
| Underline whitespace | An underline beneath whitespace runs | Off |
The non-breaking space ring is the one worth having on before you go looking for trouble. A non-breaking space draws as an ordinary gap on screen, but it is a different character — and a common reason a script or a configuration file that "looks fine" refuses to parse.
The underline switch is the one to reach for when the dots and arrows are too quiet to catch in a wall of text. It marks whitespace runs where they sit rather than adding another glyph to read around. Like every switch on this pane it is display only: it never appears in an exported RTF and never reaches the file you save.
Three marker styles: Symbols, Code Points and Bytes
The same space can be drawn three ways, and the choice changes what question the display can answer.
| Style | What it shows | Use it when |
|---|---|---|
| Symbols (default) | Quiet placeholders: ·, →, the non-breaking-space ring, and LF / CRLF / CR | You want to read the code and see the shape of the whitespace at the same time |
| Code Points | Escape-style code point labels, independent of the file's encoding | You need to name the character — to search for it, or to describe it to someone else |
| Bytes | The hex bytes in the document's own encoding: a UTF-8 space is 20, the same space in UTF-16 LE is 20 00, a UTF-8 non-breaking space is C2 A0 | You care about what the file will actually save, not what the text means |
Bytes is the style that catches encoding problems. The labels are written in the document's own encoding, so what you read on screen is what the file holds. Re-encode the text with File ▸ Encoding ▸ Convert to Encoding…, reachable from the status-bar encoding pill too, and the byte labels move with it — our encoding handling keeps what you read on screen and what you are about to save in step. Where a character cannot be represented in the encoding you have chosen, its label shows the UTF-8 bytes instead and carries an asterisk, so you can see it is a substitute rather than the truth.
Reading the end-of-line labels
These labels are the fastest way to answer "is this file mixed?". LF is the Unix ending, CRLF the Windows pair, CR the old classic-Mac one. Scroll with the labels on and a stray CRLF among a thousand LFs is obvious in a way it never is otherwise.
The status bar answers the same question in summary form. Its line-ending pill shows Mixed if the file contains more than one kind, None if there are no line endings at all, and otherwise the ending in use. File ▸ Line Endings ▸ Show Line Ending Details… gives the breakdown, and the same menu converts the whole document to LF, CRLF or CR once you have decided which you want. Converting is an edit. The labels are not.
Showing is not changing
This is the distinction that matters most: Show Invisibles changes drawing only. The document is byte-for-byte what it was before you clicked, and you can leave the display on indefinitely without ever touching it.
Removing the characters is a different command. That is Clean ▸ Clean Invisible / Special Characters…, which opens a review sheet listing every category our hidden-character scanner covers, with each finding shown as Line:Col · Code Point · Category · Action · Risk, and edits the document when you press Apply. The risk column is there so you can leave alone anything you put in the file on purpose. The same menu carries Find Next Hidden Character and Find Previous Hidden Character for stepping through them without removing anything. If you want the characters gone rather than visible, that is where to go, and the result can be undone like any other edit.
The other markings, and why they look different
You may see markings you did not turn on. Note My also marks what our hidden-character scanner finds, so a problem you were not looking for still catches your eye. Those marks are governed by Highlight findings in Settings ▸ Text Cleanup, which is on by default. They are a second display running alongside the four switches above, with a switch of their own, so you get both kinds of information at once.
Findings are marked in four ways, and the treatment tells you what kind of character you are looking at: a slug for characters with no width at all — zero-width characters, bidi controls, control characters, soft hyphens, line and paragraph separators, variation selectors, a lone CR; a background tint for the space family; an underline for smart punctuation and homoglyph letters; and a bar for trailing whitespace and mixed tab-and-space indentation.
Three kinds of finding are reported in the review sheet: mixed CRLF across the document, non-NFC clusters and combining marks. Each of those describes the file as a whole, or a run of characters working together, so the sheet is where they read clearly — each one set out with its line, its code point, its category and its risk, in a row you can act on. The sheet is the thorough view of the two: open it when you want the complete picture of a file, and treat the marks in the editor as the quick glance you get while you are working.
The status-bar cleanup pill is the summary for all of it: Clean in green, "N hidden" in orange, or "N hidden · D risky" in red. Its popover offers Show in Text, which takes you to a finding rather than making you hunt for the marker. On a very large document, open the review sheet when you want the complete picture: it sets out every finding with its line, code point, category and risk, so a long file gets the same thorough read as a short one. The pill is the quick glance you get while you work; the sheet is the verdict.
Invisibles while comparing two files
When two lines differ and you cannot see why, the difference is usually whitespace. The compare inspector along the bottom of the window carries an eye toggle labelled Reveal Invisibles, which reveals every category our hidden-character scanner covers across both panes at once. It is display only: neither file is changed by it. Turn it on when our comparison view insists that two identical-looking lines differ, and off again once you have your answer.
Motion and contrast
When findings are revealed they pulse briefly, then settle to a steadier emphasis so the marks stay findable without shouting. With Reduce Motion turned on in macOS, the pulse is skipped and you go straight to the settled state. Nothing is lost but the animation.
Indentation guides are a related but separate display. They have ten styles in Settings ▸ Guides, are on by default, and are drawn more strongly when Increase Contrast is enabled in macOS. Guides mark the levels of indentation; invisibles mark the characters that produce them. When a block sits one step too far in, turn both on together.
Set it once, and it follows you
The four switches and the marker style are application settings. Choose the view you like once and every document you open afterwards is drawn the same way — this session, and the next, and the one after a fortnight away. There is nothing to re-enable when you come back to a file, and nothing to configure per document. When a particular job wants a different view for ten minutes, flip the toolbar toggle for as long as you need it and flip it back — a click each way, and Settings ▸ Invisibles always shows you exactly which of the four are on.
Between the two displays, a page of text tells you everything it is holding. The four switches draw the characters that take up room — spaces, tabs, non-breaking spaces and the line ending at the end of every line — while our hidden-character scanner marks the ones that take up none at all: zero-width characters, bidi controls, soft hyphens, control characters, variation selectors. Leave both on and the file has nowhere left to hide something from you.
And the display stays a display for as long as you want it. Reading a file with every marker turned on costs you nothing at all: the bytes on disk are exactly what they were when you opened it, so you can study a file you are nervous about, or one you did not write, without any risk of nudging it. When you decide something has to go, the Clean menu makes that a separate, deliberate, undoable edit. Look first, change second, in that order and on your own timing.
The two menu items for stepping through findings — Find Next Hidden Character and Find Previous Hidden Character — sit under the Clean menu and take you from one finding to the next without touching a character. Combine them with the markers on and you can walk a whole file, look at each thing in turn, and decide about it one at a time.
Troubleshooting
You want the trailing-whitespace highlight as well
Go to Settings ▸ Invisibles and tick it there. On that pane all four are individual switches and nothing is implied, so what you tick is exactly what you get. The two quick routes each carry their own combination: the toolbar button gives you whitespace, end-of-line and the underline, and View ▸ Show All Characters gives you whitespace, end-of-line and the trailing highlight. Use whichever suits the job in front of you, and the Settings pane when you want the full set at once.
The View menu item shows a dash rather than a tick
A dash means some of the four are on and some are not. Because the toolbar button and the menu item carry different combinations, switching the display on from the toolbar leaves the menu item in that mixed state — the menu is telling you the truth about a partial setting rather than rounding it up to a tick it has not earned. For a plain tick, set the four switches yourself in Settings ▸ Invisibles.
Choosing a marker style for a very large file
On an ordinary source file the style you pick is simply the style you get, whichever of the three it is. On a document big enough for the status bar to flag its size, decide what you are asking of the display before you begin — Symbols to read the shape of the whitespace alongside the code, Bytes to know exactly what the file will save — and settle in with that one. Our large-file engine keeps documents of that size open, scrollable and responsive, so a file that big stays as comfortable to read — markers and all — as a short one.
I can see the markers, but the characters are still in my text
They are meant to be. Nothing has been removed. Use Clean ▸ Clean Invisible / Special Characters… to review and remove them, or the Remove Invisible Character(s) row in the status-bar cleanup popover for a one-click fix of the findings that are unambiguously wrong.
Two spaces look identical even with markers on
The whitespace switch has glyphs for three things: a middle dot for a space, an arrow for a tab, a ring for a non-breaking space. Switching the marker style to Bytes names those three exactly — a plain space reads 20 against C2 A0 for a non-breaking space in a UTF-8 document — and Code Points gives you the same certainty without depending on the encoding. The rest of the space family belongs to our hidden-character scanner rather than to the four switches: it names Narrow no-break space, Unusual Unicode spaces and Ideographic space separately, and the review sheet identifies each finding by its code point, so you can search for that exact character.
Markers disappeared after I typed
The invisibles markers do not disappear — they follow the text as you type. The separate finding marks from our hidden-character scanner do: they clear the moment you edit, so you are never left reading a mark that no longer matches the text in front of you. Check the file again from the status-bar cleanup pill, or open Clean ▸ Clean Invisible / Special Characters…, and the marks come back with the findings that are still there.
A byte label ends in an asterisk
That character cannot be represented in the document's current encoding, so the label shows its UTF-8 bytes and marks them with an asterisk to say so. It usually means the document's encoding and its contents disagree — check File ▸ Encoding and convert to one that can hold everything in the file.
Frequently asked questions
Does showing invisible characters change the file?
Your document comes through untouched. The markers are display only, nothing is written into the file, and you can leave them on for as long as you like — the bytes on disk stay exactly as they were. When you do want characters removed, the Clean menu makes that a deliberate edit you can undo like any other.
How do I see whether a file uses tabs or spaces?
Turn on the whitespace switch. A tab draws as an arrow and a space as a middle dot, so mixed indentation is visible immediately in the left margin. Our hidden-character scanner also reports mixed tab-and-space indentation, and flags it as risky in a Python file, where indentation is part of the syntax.
Can I see whether a file has Windows or Unix line endings?
Yes, two ways. Turn on the end-of-line switch and each line is labelled LF, CRLF or CR. Or read the status-bar line-ending pill, which shows Mixed when the file contains more than one kind. File ▸ Line Endings ▸ Show Line Ending Details… gives the full breakdown.
How do I see zero-width characters?
They come from the second of the two displays. The four invisibles switches cover whitespace and line endings; characters with no width at all — zero-width spaces, bidi controls, soft hyphens — are found by our hidden-character scanner and marked in their own right, governed by Highlight findings in Settings ▸ Text Cleanup, which is on by default. Run both together and the file has nowhere left to hide.
What does the Bytes marker style actually show?
The hexadecimal bytes the character occupies in the document's current encoding — 20 for a space in UTF-8, 20 00 in UTF-16 LE, C2 A0 for a UTF-8 non-breaking space. It reflects what the file saves rather than what the character means.
Do the markers stay on next time I open the app?
Yes. The four switches and the marker style are stored as application settings, so they persist across launches and apply to every document — not just the one that was open when you set them.