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 hlsearch
habilitado) 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 0x00
y ASCII 0x7F
(0-127), y parece funcionar en mi prueba simple. Para ASCII extendido, por supuesto, extienda el rango hasta en \xFF
lugar de \x7F
usar /[^\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-match
define una cadena que coincide con caer en un grupo.
highlight
define 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.
termbg
no parece ser un comando legal en VIM 7.3 como está instalado en Ubuntu Server 12.10.
termbg
no parece ser un parámetro legal en VIM 7.3 como está instalado en Ubuntu Server 12.10.
term
no puede tener color de fondo, mientras que el terminal de color cterm
sí.
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 continue
Linux mint 17.3
containedin=ALL
al 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 if
declaració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 hlsearch
destacará:
/[^[:alnum:][:punct:][:space:]]/
:%s/[^[:alnum:][:punct:][:space:]]//gc
cuá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
enc
a 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 ERROR
en 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 zshComment
a 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 :sy
en 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-contains
secció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]