Respuestas:
Al usar el rango en una []clase de caracteres en su búsqueda, debería poder excluir el rango de caracteres hexadecimales ASCII, por lo tanto, resaltar (suponiendo que haya hlsearchhabilitado) todos los demás caracteres que se encuentran fuera del rango ASCII:
/[^\x00-\x7F]
Esto hará una coincidencia negativa (vía [^]) para los caracteres entre ASCII 0x00y ASCII 0x7F(0-127), y parece funcionar en mi prueba simple. Para ASCII extendido, por supuesto, extienda el rango hasta en \xFFlugar de \x7Fusar /[^\x00-\xFF].
También puede expresarlo en decimal a través de \d:
/[^\d0-\d127]
Si necesita algo más específico, como la exclusión de caracteres no imprimibles, deberá agregar esos rangos a la clase de caracteres [].
Sí, hay una función nativa para resaltar las cadenas coincidentes. Dentro de Vim, haz:
:help highlight
:help syn-match
syn-matchdefine una cadena que coincide con caer en un grupo.
highlightdefine el color utilizado por el grupo. Solo piense en el resaltado de sintaxis para sus archivos vimrc.
Entonces puede usar los siguientes comandos en su archivo .vimrc:
syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2
:comandos delante de tu vimrc.
termbgno parece ser un comando legal en VIM 7.3 como está instalado en Ubuntu Server 12.10.
termbgno parece ser un parámetro legal en VIM 7.3 como está instalado en Ubuntu Server 12.10.
termno puede tener color de fondo, mientras que el terminal de color ctermsí.
Para otras personas (de ahora en adelante menos desafortunadas) que terminan aquí a través de un motor de búsqueda y no pueden lograr el resaltado de caracteres no ASCII, intente esto (ponga esto en su .vimrc):
highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
Esto tiene el beneficio adicional de no colisionar con definiciones de sintaxis regulares (basadas en tipo de archivo [extensión de archivo]).
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=ALLal final de la última línea, haciéndolo au BufReadPost * syntax match nonascii "[^\u0000-\u007F]" containedin=ALL. Encuentro la distracción pena (Unicode cuando se permite), la respuesta original aquí no no coger cosas como el código no ASCII en el interior de una ifdeclaración ...
autocmd BufRead ....incluirlo en un grupo automático en vim, a menos que tenga una muy buena razón para no ...
Esta expresión regular también funciona. Fue el primer hit de Google para "vim remove caracteres no ascii" de briceolion.com y con :set hlsearchdestacará:
/[^[:alnum:][:punct:][:space:]]/
:%s/[^[:alnum:][:punct:][:space:]]//gccuál resalta primero, luego reemplaza.
Si está interesado también en los caracteres no imprimibles , use este:/[^\x00-\xff]/
Lo uso en una función:
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
enca fenc. Cambié la codificación porque mi codificación predeterminada es (era en 2013) latin1. La función no resalta los caracteres no imprimibles si el conjunto de caracteres es latin1. Para ver el resaltado, debe tener la clave ERRORen su archivo de sintaxis de color. Esto es mío:hi Error guifg=Black guibg=Orange
En base a las otras respuestas sobre este tema y la respuesta que obtuve aquí , la agregué a mi .vimrc, para poder controlar el resaltado no ASCII escribiendo <C-w>1. También muestra comentarios internos, aunque necesitará agregar el grupo de comentarios para cada sintaxis de archivo que usará. Es decir, si va a editar un archivo zsh, deberá agregarlo zshCommenta la línea
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
de lo contrario, no mostrará el carácter no ascii (también puede establecer contenido en = TODOS si desea asegurarse de mostrar caracteres no ascii en todos los grupos). Para verificar cómo se llama al comentario en un tipo de archivo diferente, abra un archivo del tipo deseado e ingrese :syen vim, luego busque el comentario en los elementos de sintaxis.
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 alguna manera, ninguna de las respuestas anteriores funcionó para mí.
Entonces solía :1,$ s/[^0-9a-zA-Z,-_\.]//g
Mantiene la mayoría de los personajes que me interesan.
Alguien ya ha respondido la pregunta. Sin embargo, para otros que todavía tienen problemas, aquí hay otra solución para resaltar caracteres no ascii en los comentarios (o cualquier grupo de sintaxis en la materia). No es el mejor, pero es una solución temporal.
Uno puede intentar:
:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained |
\ highlight nonascii ctermfg=yellow guifg=yellow
Esto tiene partes de mezcla de otras soluciones. Puede eliminar contained, pero, de la documentación, puede haber un problema potencial de recurrirse (según tengo entendido). Para ver otros patrones definidos, la syn-containssección lo contendría.
:help syn-containedin
:help syn-contains
Problema replicado de: Establezca el elemento con mayor prioridad de resaltado en vim
/[^\d0-\d127]