J'essaie de faire en sorte que Vim mette en surbrillance les caractères non-ASCII. Existe-t-il un paramètre, un modèle de recherche regex ou un plugin disponible pour le faire?
En utilisant une plage dans une classe de caractères []
dans votre recherche, vous devriez pouvoir exclure la plage de caractères hexadécimaux ASCII, et donc mettre en surbrillance (en supposant que vous avez activé hlsearch
) tous les autres caractères situés en en dehors de la plage ASCII:
/[^\x00-\x7F]
Ceci fera une correspondance négative (via [^]
) pour les caractères compris 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'à \xFF
au lieu de \x7F
à l'aide de /[^\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 de caractères non imprimables, vous devrez ajouter ces plages dans la classe de caractères []
.
Oui, il existe une fonctionnalité native à mettre en surbrillance pour toutes les chaînes correspondantes. Dans Vim, faites:
:help highlight
:help syn-match
syn-match
définit une chaîne qui correspond à un groupe. highlight
définit la couleur utilisée par le groupe. Il suffit de penser à 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
Pour les autres personnes (désormais moins malchanceuses) qui se retrouvent ici via un moteur de recherche et ne peuvent pas mettre en évidence les caractères non-ASCII, essayez ceci (mettez ceci dans votre fichier .vimrc):
highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
Cela présente l’avantage supplémentaire de ne pas entrer en conflit avec les définitions de syntaxe habituelles (basées sur le type de fichier [extension de fichier]).
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
Cette regex fonctionne aussi bien. C'était le premier hit Google pour "vim remove non-caractères ASCII" de briceolion.com et avec :set hlsearch
va mettre en évidence:
:/[^[:alnum:][:punct:][:space:]]/g
Sur la base des autres réponses à ce sujet et de la réponse que j'ai obtenue ici , j'ai ajouté ceci à mon .vimrc
, afin de pouvoir contrôler la mise en surbrillance 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 voulez éditer un fichier zsh, vous devrez ajouter zshComment
à la ligne.
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
sinon, le caractère non-ascii ne sera pas affiché (vous pouvez également définir conteneur contient dans = TOUT si vous voulez être sûr d'afficher des 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
dans vim, puis recherchez les éléments de syntaxe correspondant au 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>
D'une manière ou d'une autre, aucune des réponses ci-dessus n'a fonctionné pour moi.
J'ai donc 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. Toutefois, pour les 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 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 mélanger des pièces d'autres solutions. Vous pouvez supprimer contained
, mais dans la documentation, il peut y avoir un problème de récurrence (si je comprends bien). Pour afficher d'autres modèles définis, la section syn-contains
le contiendrait.
:help syn-containedin
:help syn-contains
Problème dupliqué à partir de: Définir l’élément comme prioritaire mettre en évidence la priorité sur vim