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 hlsearch
ativado) todos os outros caracteres fora do intervalo ASCII:
/[^\x00-\x7F]
Isso fará uma correspondência negativa (via [^]
) para caracteres entre ASCII 0x00
e ASCII 0x7F
(0-127) e parece funcionar no meu teste simples. Para ASCII estendido, é claro, estenda o intervalo até em \xFF
vez de \x7F
usar /[^\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-match
define uma sequência que corresponde a cair em um grupo.
highlight
define 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.
termbg
nã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.
term
não pode ter cor de fundo, enquanto o terminal colorido cterm
pode.
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 continue
Linux 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 if
declaraçã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 hlsearch
destacará:
/[^[:alnum:][:punct:][:space:]]/
:%s/[^[:alnum:][:punct:][:space:]]//gc
que 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
enc
para 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 ERROR
no 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 :sy
no 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-contains
seção o conteria.
:help syn-containedin
:help syn-contains
Problema replicado de: defina o item para destacar maior prioridade no vim
/[^\d0-\d127]