How to get Vim to highlight non-ascii characters?

Solution 1:

Using range in a [] character class in your search, you ought to be able to exclude the ASCII hexadecimal character range, therefore highlighting (assuming you have hlsearch enabled) all other characters lying outside the ASCII range:

/[^\x00-\x7F]

This will do a negative match (via [^]) for characters between ASCII 0x00 and ASCII 0x7F (0-127), and appears to work in my simple test. For extended ASCII, of course, extend the range up to \xFF instead of \x7F using /[^\x00-\xFF].

You may also express it in decimal via \d:

/[^\d0-\d127]

If you need something more specific, like exclusion of non-printable characters, you will need to add those ranges into the character class [].

Solution 2:

Yes, there is a native feature to do highlighting for any matched strings. Inside Vim, do:

:help highlight
:help syn-match

syn-match defines a string that matches fall into a group. highlight defines the color used by the group. Just think about syntax highlighting for your vimrc files.

So you can use below commands in your .vimrc file:

syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2