Risposte:
Utilizzando l'intervallo in una []classe di caratteri nella ricerca, dovresti essere in grado di escludere l'intervallo di caratteri esadecimali ASCII, quindi evidenziando (supponendo che tu abbia hlsearchabilitato) tutti gli altri caratteri che si trovano al di fuori dell'intervallo ASCII:
/[^\x00-\x7F]
Questo farà una corrispondenza negativa (via [^]) per i caratteri tra ASCII 0x00e ASCII 0x7F(0-127) e sembra funzionare nel mio semplice test. Per ASCII esteso, ovviamente, estendere l'intervallo fino a \xFFanziché \x7Futilizzare /[^\x00-\xFF].
Puoi anche esprimerlo in decimali tramite \d:
/[^\d0-\d127]
Se hai bisogno di qualcosa di più specifico, come l'esclusione di caratteri non stampabili, dovrai aggiungere tali intervalli nella classe di caratteri [].
Sì, esiste una funzione nativa per evidenziare le stringhe corrispondenti. All'interno di Vim, esegui:
:help highlight
:help syn-match
syn-matchdefinisce una stringa che corrisponde a un gruppo.
highlightdefinisce il colore utilizzato dal gruppo. Pensa solo all'evidenziazione della sintassi per i tuoi file vimrc.
Quindi puoi usare i comandi seguenti nel tuo file .vimrc:
syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2
:davanti ai comandi nel tuo vimrc.
termbgnon sembra essere un comando legale in VIM 7.3 installato su Ubuntu Server 12.10.
termbgnon sembra essere un parametro legale in VIM 7.3 installato su Ubuntu Server 12.10.
termnon può avere il colore di sfondo, mentre il terminale del colore ctermpuò.
Per altre persone (d'ora in poi meno sfortunate) che finiscono qui tramite un motore di ricerca e non riescono a realizzare l'evidenziazione di caratteri non ASCII, prova questo (inseriscilo nel tuo .vimrc):
highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
Ciò ha l'ulteriore vantaggio di non scontrarsi con definizioni di sintassi regolari (basate sul tipo di file [estensione file]).
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=ALLalla fine dell'ultima riga, rendendolo au BufReadPost * syntax match nonascii "[^\u0000-\u007F]" containedin=ALL. Trovo la distrazione vale la pena (quando unicode è consentito), la risposta originale qui non non prendere le cose come il codice non-ascii all'interno di una ifdichiarazione ...
autocmd BufRead ....in un gruppo automatico in vim, a meno che tu non abbia un ottimo motivo per non ...
Anche questa regex funziona. È stato il primo hit di Google per "rimuovere i caratteri non ascii" da briceolion.com e con :set hlsearchevidenzierà:
/[^[:alnum:][:punct:][:space:]]/
:%s/[^[:alnum:][:punct:][:space:]]//gcche prima evidenzia, poi sostituisce.
Se sei interessato anche ai caratteri non stampabili , usa questo:/[^\x00-\xff]/
Lo uso in una funzione:
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. Ho cambiato la codifica perché la mia codifica predefinita è (era nel 2013) latin1. La funzione non evidenzia i caratteri non stampabili se il set di caratteri è latino1. Per vedere l'evidenziazione devi avere la chiave ERRORnel tuo file di sintassi del colore. Questo è mio:hi Error guifg=Black guibg=Orange
Sulla base delle altre risposte su questo argomento e della risposta che ho ricevuto qui, l' ho aggiunto al mio .vimrc, in modo da poter controllare l'evidenziazione non ascii digitando <C-w>1. Mostra anche i commenti interni, sebbene sia necessario aggiungere il gruppo di commenti per ogni sintassi del file che verrà utilizzata. Cioè, se modificherai un file zsh, dovrai aggiungere zshCommentalla riga
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
altrimenti non mostrerà il carattere non ascii (puoi anche impostare contenuta = ALL se vuoi essere sicuro di mostrare caratteri non ascii in tutti i gruppi). Per controllare come viene chiamato il commento su un diverso tipo di file, apri un file del tipo desiderato e inserisci :sysu vim, quindi cerca gli elementi della sintassi per il commento.
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>
In qualche modo nessuna delle risposte sopra ha funzionato per me.
Quindi ho usato :1,$ s/[^0-9a-zA-Z,-_\.]//g
Mantiene la maggior parte dei personaggi che mi interessano.
Qualcuno ha già risposto alla domanda. Tuttavia, per gli altri che hanno ancora problemi, ecco un'altra soluzione per evidenziare i caratteri non ascii nei commenti (o qualsiasi gruppo di sintassi nell'argomento). Non è il migliore, ma è una soluzione temporanea.
Si può provare:
:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained |
\ highlight nonascii ctermfg=yellow guifg=yellow
Questo ha mescolato parti di altre soluzioni. È possibile rimuovere contained, ma, dalla documentazione, potrebbe esserci un potenziale problema di ricorrere se stesso (come ho capito). Per visualizzare altri schemi definiti, la syn-containssezione lo contiene.
:help syn-containedin
:help syn-contains
Problema risolto da: imposta l'elemento su una priorità di evidenziazione più alta su vim
/[^\d0-\d127]