Respostas:
Usando o intervalo em uma []classe de caracteres em sua pesquisa, você deve poder excluir o intervalo de caracteres hexadecimais ASCII, destacando, portanto, (supondo que você tenha hlsearchativado) todos os outros caracteres fora do intervalo ASCII:
/[^\x00-\x7F]
Isso fará uma correspondência negativa (via [^]) para caracteres entre ASCII 0x00e ASCII 0x7F(0-127) e parece funcionar no meu teste simples. Para ASCII estendido, é claro, estenda o intervalo até em \xFFvez de \x7Fusar /[^\x00-\xFF].
Você também pode expressá-lo em decimal via \d:
/[^\d0-\d127]
Se você precisar de algo mais específico, como exclusão de caracteres não imprimíveis, precisará adicionar esses intervalos à classe de caracteres [].
Sim, há um recurso nativo para realçar as seqüências correspondentes. Dentro do Vim, faça:
:help highlight
:help syn-match
syn-matchdefine uma sequência que corresponde a cair em um grupo.
highlightdefine a cor usada pelo grupo. Pense no realce da sintaxe para seus arquivos vimrc.
Portanto, você pode usar os comandos abaixo no seu arquivo .vimrc:
syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2
:na frente dos comandos no seu vimrc.
termbgnão parece ser um comando legal no VIM 7.3, instalado no Ubuntu Server 12.10.
termbg, não parece ser um parâmetro legal no VIM 7.3, instalado no Ubuntu Server 12.10.
termnão pode ter cor de fundo, enquanto o terminal colorido ctermpode.
Para outras pessoas (a partir de agora menos azaradas) que acabam aqui por meio de um mecanismo de pesquisa e não conseguem destacar os caracteres não ASCII, tente o seguinte (coloque isso no seu .vimrc):
highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
Isso tem o benefício adicional de não colidir com definições de sintaxe regulares (tipo de arquivo [extensão de arquivo]).
E319: Sorry, the command is not available in this version: au BufReadPost * syntax match nonascii "[^\u0000-\u007F]" Press ENTER or type command to continueLinux mint 17.3
containedin=ALL-lo ao final da última linha au BufReadPost * syntax match nonascii "[^\u0000-\u007F]" containedin=ALL. Acho que a pena distração-lo (quando unicode é permitido), a resposta original aqui se não pegar coisas como código não-ascii dentro de uma ifdeclaração ...
autocmd BufRead ....em uma autogroup no vim, a menos que você tenha uma boa razão para não ...
Esse regex também funciona. Foi o primeiro hit do google para "vim remove caracteres não-ascii" do briceolion.com e :set hlsearchdestacará:
/[^[:alnum:][:punct:][:space:]]/
:%s/[^[:alnum:][:punct:][:space:]]//gcque destaca primeiro e depois a substitui.
Se você também estiver interessado nos caracteres não imprimíveis , use este:/[^\x00-\xff]/
Eu o uso em uma função:
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
encpara fenc. Alterei a codificação porque minha codificação padrão é (foi em 2013) latin1. A função não destaca os caracteres não imprimíveis se o conjunto de caracteres for latin1. Veja também o destaque: você deve ter a chave ERRORno seu arquivo de sintaxe de cores. Este é o meu:hi Error guifg=Black guibg=Orange
Com base nas outras respostas sobre este tópico e na resposta que obtive aqui , adicionei isso ao meu .vimrc, para que eu possa controlar o destaque não-ascii digitando <C-w>1. Ele também mostra comentários internos, embora você precise adicionar o grupo de comentários para cada sintaxe de arquivo que usará. Ou seja, se você editar um arquivo zsh, precisará adicionar zshCommentà linha
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
caso contrário, ele não mostrará o caractere não-ascii (você também pode definir o contido em = ALL se quiser ter certeza de mostrar caracteres não-ascii em todos os grupos). Para verificar como o comentário é chamado em um tipo de arquivo diferente, abra um arquivo do tipo desejado e insira :syno vim, depois pesquise nos itens da sintaxe pelo comentário.
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>
De alguma forma, nenhuma das respostas acima funcionou para mim.
Então eu usei :1,$ s/[^0-9a-zA-Z,-_\.]//g
Ele mantém a maioria dos personagens que me interessam.
Alguém já respondeu à pergunta. No entanto, para outros que ainda estão tendo problemas, aqui está outra solução para destacar caracteres não-ascii nos comentários (ou qualquer grupo de sintaxe no assunto). Não é o melhor, mas é uma correção temporária.
Pode-se tentar:
:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained |
\ highlight nonascii ctermfg=yellow guifg=yellow
Isso misturou peças de outras soluções. Você pode remover contained, mas, da documentação, pode haver um problema potencial de se recuperar novamente (como eu entendo). Para visualizar outros padrões definidos, a syn-containsseção o conteria.
:help syn-containedin
:help syn-contains
Problema replicado de: defina o item para destacar maior prioridade no vim
/[^\d0-\d127]