Réponses:
En utilisant la plage dans une []
classe de caractères dans votre recherche, vous devriez pouvoir exclure la plage de caractères hexadécimaux ASCII, mettant ainsi en évidence (en supposant que vous avez hlsearch
activé) tous les autres caractères situés en dehors de la plage ASCII:
/[^\x00-\x7F]
Cela fera une correspondance négative (via [^]
) pour les caractères entre ASCII 0x00
et ASCII 0x7F
(0-127), et semble fonctionner dans mon test simple. Pour l'ASCII étendu, bien sûr, étendez la plage jusqu'à au \xFF
lieu de l' \x7F
utiliser /[^\x00-\xFF]
.
Vous pouvez également l'exprimer en décimal via \d
:
/[^\d0-\d127]
Si vous avez besoin de quelque chose de plus spécifique, comme l'exclusion des caractères non imprimables, vous devrez ajouter ces plages dans la classe de caractères []
.
Oui, il existe une fonctionnalité native pour mettre en évidence toutes les chaînes correspondantes. Dans Vim, faites:
:help highlight
:help syn-match
syn-match
définit une chaîne qui correspond à tomber dans un groupe.
highlight
définit la couleur utilisée par le groupe. Pensez simplement à la coloration syntaxique de vos fichiers vimrc.
Vous pouvez donc utiliser les commandes ci-dessous dans votre fichier .vimrc:
syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2
:
devant les commandes dans votre vimrc.
termbg
ne semble pas être une commande légale dans VIM 7.3 tel qu'installé sur Ubuntu Server 12.10.
termbg
ne semble pas être un paramètre légal dans VIM 7.3 tel qu'installé sur Ubuntu Server 12.10.
term
ne peut pas avoir de couleur d'arrière-plan, alors que le terminal couleur le cterm
peut.
Pour les autres (à partir de maintenant moins malchanceux) qui se retrouvent ici via un moteur de recherche et ne peuvent pas mettre en évidence des caractères non ASCII, essayez ceci (mettez ceci dans votre .vimrc):
highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
Ceci a l'avantage supplémentaire de ne pas entrer en conflit avec les définitions de syntaxe régulières (basées sur le type de fichier [extension de fichier]).
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
à la fin de la dernière ligne, ce qui en fait au BufReadPost * syntax match nonascii "[^\u0000-\u007F]" containedin=ALL
. Je trouve que la distraction en vaut la peine (lorsque l'unicode est autorisé), la réponse originale ici n'attrape pas des choses telles que le code non-ascii à l'intérieur d'une if
déclaration ...
autocmd BufRead ....
dans un autogroupe dans vim, sauf si vous avez une très bonne raison de ne pas ...
Cette regex fonctionne également. C'était le premier hit google pour "vim remove non-ascii characters" de briceolion.com et :set hlsearch
mettra en évidence:
/[^[:alnum:][:punct:][:space:]]/
:%s/[^[:alnum:][:punct:][:space:]]//gc
qui met en évidence en premier, puis remplace.
Si vous êtes également intéressé par les caractères non imprimables , utilisez celui-ci:/[^\x00-\xff]/
Je l'utilise dans une fonction:
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
en fenc
. J'ai changé l'encodage car mon encodage par défaut est (était en 2013) latin1. La fonction ne met pas en évidence les caractères non imprimables si le jeu de caractères est latin1. Pour voir la mise en évidence, vous devez avoir la clé ERROR
dans votre fichier de syntaxe de couleur. C'est à moi:hi Error guifg=Black guibg=Orange
Sur la base des autres réponses sur ce sujet et de la réponse que j'ai ici, j'ai ajouté ceci à mon .vimrc
, afin que je puisse contrôler la mise en évidence non-ascii en tapant <C-w>1
. Il affiche également les commentaires internes, bien que vous deviez ajouter le groupe de commentaires pour chaque syntaxe de fichier que vous utiliserez. Autrement dit, si vous éditez un fichier zsh, vous devrez ajouter zshComment
à la ligne
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
sinon, il n'affichera pas le caractère non-ascii (vous pouvez également définir containsin = ALL si vous voulez être sûr d'afficher les caractères non-ascii dans tous les groupes). Pour vérifier comment le commentaire est appelé sur un type de fichier différent, ouvrez un fichier du type souhaité et entrez :sy
sur vim, puis recherchez les éléments de syntaxe pour le commentaire.
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>
Aucune des réponses ci-dessus n'a fonctionné pour moi.
Alors j'ai utilisé :1,$ s/[^0-9a-zA-Z,-_\.]//g
Il garde la plupart des personnages qui m'intéressent.
Quelqu'un a déjà répondu à la question. Cependant, pour d'autres qui rencontrent encore des problèmes, voici une autre solution pour mettre en évidence les caractères non-ascii dans les commentaires (ou tout autre groupe de syntaxe en la matière). Ce n'est pas le meilleur, mais c'est une solution temporaire.
On peut essayer:
:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained |
\ highlight nonascii ctermfg=yellow guifg=yellow
Cela a des pièces de mélange d'autres solutions. Vous pouvez supprimer contained
, mais, de la documentation, il peut y avoir un problème potentiel de récurrence (si je comprends bien). Pour afficher d'autres modèles définis, la syn-contains
section le contiendrait.
:help syn-containedin
:help syn-contains
Problème répliqué depuis: définir l'élément sur une priorité de surbrillance plus élevée sur vim
/[^\d0-\d127]