Perhaps some of the invisible spaces should just be rendered as-is (without a substitution), I translated them to visible code points only because invisible characters have a tendency to cause hard to diagnose problems for end users, but this might be limited to non-breaking space, which can easily be typed by accident without noticing.
That would be great. I suggest to show those invisible characters when "View > Show Invisible Characters" is activated. Although in the current behaviour of that feature, the original text remains untouched. But if you include `SpaceCharacters` in "Invisible Characters", then showing them needs shifting of parts of the original texts to fit the representor of the invisible characters in place of those zero-widths chars. I guess this is not a big problem because those characters are not so common in usual texts, and when they are there, and the user wants to see "Invisible Characters", I guess he wants to see them even if the texts are shifted.
Other Invisible characters I suggest to be shown in "Show Invisible Characters" mode: * Left-to-right mark (U+200E) * Right-to-left mark (U+200F) * These: https://www.cs.tut.fi/~jkorpela/chars/spaces.html