How to get Vim to highlight non-ascii characters?
我试图让Vim突出显示非ASCII字符。是否有可用的设置、regex搜索模式或插件?
在搜索中使用
1 | /[^\x00-\x7F] |
这将对ascii
您也可以通过
1 | /[^\d0-\d127] |
如果需要更具体的内容,例如排除不可打印的字符,则需要将这些范围添加到字符类
是的,对于任何匹配的字符串,都有一个本机功能来进行突出显示。内部VIM,DO:
1 2 | :help highlight :help syn-match |
因此,可以在.vimrc文件中使用以下命令:
1 2 | syntax match nonascii"[^\x00-\x7F]" highlight nonascii guibg=Red ctermbg=2 |
对于其他人(从现在开始不那么倒霉)来说,他们是通过搜索引擎在这里结束的,无法完成非ASCII字符的突出显示,请尝试此操作(将其放入.vimrc中):
1 2 | highlight nonascii guibg=Red ctermbg=1 term=standout au BufReadPost * syntax match nonascii"[^\u0000-\u007F]" |
这样做的另一个好处是不与常规(基于文件类型[文件扩展名]的)语法定义冲突。
如果您对不可打印字符也感兴趣,请使用以下字符:
我在函数中使用它:
1 2 3 4 5 6 7 8 9 10 | function! NonPrintable() setlocal enc=utf8 if search('[^\x00-\xff]') != 0 call matchadd('Error', '[^\x00-\xff]') echo 'Non printable characters in text' else setlocal enc=latin1 echo 'All characters are printable' endif endfunction |
这个正则表达式也可以工作。这是谷歌从briceolion.com上首次点击"vim删除非ASCII字符",使用
1 | :/[^[:alnum:][:punct:][:space:]]/g |
基于关于这个主题的其他答案和我在这里得到的答案,我将这个添加到我的
1 | au BufReadPost * syntax match nonascii"[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment |
否则,它不会显示非ASCII字符(如果要确保在所有组中显示非ASCII字符,还可以设置containedIn=all)。要检查如何对不同的文件类型调用注释,请打开所需类型的文件,并在VIM上输入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | function HighlightNonAsciiOff() echom"Setting non-ascii highlight off" syn clear nonascii let g:is_non_ascii_on=0 augroup HighlightUnicode autocmd! augroup end endfunction function HighlightNonAsciiOn() echom"Setting non-ascii highlight on" augroup HighlightUnicode autocmd! autocmd ColorScheme * \ syntax match nonascii"[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment | \ highlight nonascii cterm=underline ctermfg=red ctermbg=none term=underline augroup end silent doautocmd HighlightUnicode ColorScheme let g:is_non_ascii_on=1 endfunction function ToggleHighlightNonascii() if g:is_non_ascii_on == 1 call HighlightNonAsciiOff() else call HighlightNonAsciiOn() endif endfunction silent! call HighlightNonAsciiOn() nnoremap <C-w>1 :call ToggleHighlightNonascii()<CR> |
有人已经回答了这个问题。但是,对于仍有问题的其他人,这里有另一个解决方案来突出显示注释中的非ASCII字符(或相关的任何语法组)。这不是最好的,但只是暂时的解决办法。
可以尝试:
1 2 | :syntax match nonascii"[^\u0000-\u007F]" containedin=ALL contained | \ highlight nonascii ctermfg=yellow guifg=yellow |
这是其他解决方案的混合部分。您可以删除
1 2 | :help syn-containedin :help syn-contains |
复制的问题来源:将项目设置为VIM上更高的突出显示优先级
不知怎的,以上的答案对我来说都不管用。
所以我用了
它保留了我感兴趣的大部分角色。