如何让Vim突出显示非ascii字符?

chu*_*tsu 136 regex vim

我试图让Vim突出显示非ASCII字符.是否有可用的设置,正则表达式搜索模式或插件?

Mic*_*ski 263

[]在搜索中使用字符类中的范围时,您应该能够排除 ASCII十六进制字符范围,因此突出显示(假设您已hlsearch启用)位于ASCII范围之外的所有其他字符:

/[^\x00-\x7F]
Run Code Online (Sandbox Code Playgroud)

这将对ASCII 和ASCII (0-127)之间的字符进行否定匹配(via ),并且似乎在我的简单测试中起作用.当然,对于扩展的ASCII,扩展范围而不是使用.[^]0x000x7F\xFF\x7F/[^\x00-\xFF]

您也可以通过\d以下方式表达十进制:

/[^\d0-\d127]
Run Code Online (Sandbox Code Playgroud)

如果您需要更具体的内容,例如排除不可打印的字符,则需要将这些范围添加到字符类中[].

  • 十进制:`/ [^\d0-\d127]` (13认同)

Ste*_*ing 32

是的,有一个本机功能可以突出显示任何匹配的字符串.在Vim里面,做:

:help highlight
:help syn-match
Run Code Online (Sandbox Code Playgroud)

syn-match定义匹配的字符串属于一个组. highlight定义组使用的颜色.想想你的vimrc文件的语法高亮.

因此,您可以在.vimrc文件中使用以下命令:

syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2
Run Code Online (Sandbox Code Playgroud)

  • 然后`termbg`似乎不是安装在Ubuntu Server 12.10上的VIM 7.3中的合法参数. (4认同)

PAS*_*LoD 15

对于其他(从现在开始不那么不走运)人们通过搜索引擎到达这里并且无法完成非ASCII字符的突出显示,请尝试这个(把它放到你的.vimrc中):

highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
Run Code Online (Sandbox Code Playgroud)

这具有不与常规(基于文件类型[文件扩展名]的)语法定义冲突的额外好处.

  • 尽管**的目标与**已经定义的语法定义相冲突,但是如果你想要它,你可以将`containedin = ALL`添加到最后一行的末尾,使其成为'au BufReadPost*语法匹配nonascii"[^\u0000-\u007F]"containsin = ALL`.我发现值得注意的分心(当允许unicode时),这里的原始答案确实**不会在`if`语句中捕获诸如非ascii代码之类的东西...... (2认同)

Gra*_*man 7

这个正则表达式也有效。这是来自briceolion.com 的“vim remove non-ascii characters”的第一个谷歌点击,:set hlsearch并将突出显示:

/[^[:alnum:][:punct:][:space:]]/
Run Code Online (Sandbox Code Playgroud)

  • 问题是要求**突出显示**非ASCII字符,**不删除它们**。 (2认同)
  • 感谢您指出这一点,我已经编辑了我的答案。看到这个正则表达式也以与其他答案不同的方式回答了这个问题,这并不难。我原来的答案是 `:%s/[^[:alnum:][:punct:][:space:]]//gc` 它首先突出显示,然后替换。 (2认同)