J'essaie d'amener Vim à mettre en évidence des caractères non-ASCII. Existe-t-il un paramètre disponible, un modèle de recherche regex ou un plugin pour le faire?Comment faire en sorte que Vim mette en évidence les caractères non-ascii?
Répondre
Utilisation de gamme dans un tous les autres caractères se trouvant dehors classe de caractères []
dans votre recherche, vous devriez être en mesure de ne comprennent pas la plage de caractères ASCII hexadécimal, soulignant donc (en supposant que vous avez hlsearch
activé) la plage ASCII:
/[^\x00-\x7F]
Cela va faire un match négatif (via [^]
) pour les caractères ASCII entre 0x00
et ASCII 0x7F
(0-127), et semble travailler dans mon simp le test. Pour l'ASCII étendu, bien sûr, étendre la plage jusqu'à \xFF
au lieu de \x7F
en utilisant /[^\x00-\xFF]
.
Vous pouvez également exprimer en décimal par \d
:
/[^\d0-\d127]
Si vous avez besoin quelque chose de plus spécifique, comme l'exclusion des caractères non-imprimables, vous devrez ajouter ces gammes dans la classe de caractères []
.
Oui, il existe une fonctionnalité native pour mettre en surbrillance les chaînes correspondantes. Vim, faites:
:help highlight
:help syn-match
syn-match
définit une chaîne qui correspond à l'automne dans un groupe. highlight
définit la couleur utilisée par le groupe. Pensez à la coloration syntaxique pour vos fichiers vimrc.
Vous pouvez donc utiliser ci-dessous les commandes dans votre fichier vimrc:
syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2
vous n'avez pas besoin de mettre ':' devant les commandes de votre vimrc. – FDinoff
ah, oui! Tu as raison! Je vous remercie! –
'termbg' ne semble pas être une commande légale dans VIM 7.3 comme installé sur Ubuntu Server 12.10. – dotancohen
Si vous êtes intéressé aussi dans lesnon imprimables caractères utiliser 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
Votre fonction ne fonctionne pas ici, il ne met pas en évidence et il gâchera également l'encodage. Pourquoi changez-vous l'encodage local? – Werner
Essayez de changer '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 surbrillance les caractères non imprimables si le jeu de caractères est latin1. Trop voir la mise en évidence, vous devez avoir la clé 'ERROR' dans votre fichier de syntaxe de couleur. Ceci est à moi: 'Salut Erreur guifg = Noir guibg = Orange' – Reman
Pour d'autres (désormais moins malchanceux) les gens finissant ici via un moteur de recherche et ne peuvent pas être accomplis h mise en évidence des caractères non-ASCII, essayez ceci (mettre ceci dans votre .vimrc):
highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
Cela a l'avantage de ne pas entrer en collision avec régulière (filetype [extension de fichier] base) définitions de syntaxe.
A fonctionné parfaitement. – cokedude
Je reçois 'E319: Désolé, la commande n'est pas disponible dans cette version: au BufReadPost * syntaxe match nonascii" [^ \ u0000- \ u007F] " Appuyez sur ENTRÉE ou tapez commande pour continuer Linux Linux 17.3 – Nasser
Bien que le but est déclaré de ** pas ** en conflit avec les définitions de syntaxe déjà définies, si vous le désirez ** vous pouvez ajouter 'containedin = ALL' à la fin de la dernière ligne, ce qui rend' la syntaxe de BufReadPost * correspondre nonascii "[^\ u0000- \ u007F] "containedin = ALL'.Je trouve que la distraction en vaut la peine (quand unicode est autorisé), la réponse originale ici ** n'attrape pas des choses comme un code non-ascii à l'intérieur d'une déclaration 'if' ... – sjm324
D'après les autres réponses à ce sujet et la réponse que j'ai reçue here J'ai ajouté ceci à mon .vimrc
, afin que je puisse contrôler la 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 modifiez un fichier zsh, vous devrez ajouter zshComment
à la ligne
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
sinon il ne sera pas montrer le caractère non-ascii.Pour vérifier comment le commentaire est appelé sur un type de fichier différent, ouvrez un fichier du type désiré et entrez :sy
sur vim, puis recherchez les éléments de syntaxe pour le commentaire.
function HighlightNonAsciiOff()
echom "Setting non-ascii highlight off"
highlight nonascii none
let g:is_non_ascii_on=0
endfunction
function HighlightNonAsciiOn()
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
echom "Setting non-ascii highlight on"
highlight nonascii cterm=underline ctermfg=red ctermbg=none term=underline
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>
Cette regex fonctionne également. Il a été le premier coup de google pour « vim supprimer les caractères non-ascii » de briceolion.com et :set hlsearch
mettra en évidence:
:/[^[:alnum:][:punct:][:space:]]/g
La question demande de ** souligner ** caractères non-ascii, ** ne les supprimant pas **. – chutsu
Merci d'avoir signalé cela, j'ai édité ma réponse. Il n'était pas très difficile de voir que cette expression répond également à la question d'une manière différente des autres réponses. Ma réponse originale était ':% s/[^ [: alnum:] [: punct:] [: espace:]] // gc' qui met en évidence en premier, puis remplace. –
D'une certaine façon aucune des réponses ci-dessus a fonctionné pour moi.
J'utilisé :1,$ s/[^0-9a-zA-Z,-_\.]//g
Il conserve la plupart des personnages que je suis intéressé.
Quelqu'un a déjà répondu à la question. Cependant, pour les autres qui ont encore des problèmes, voici une autre solution pour mettre en évidence les caractères non-ascii dans les commentaires (ou n'importe quel 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 parties de mélange d'autres solutions. Vous pouvez supprimer contained
, mais, à partir de la documentation, il peut y avoir un problème potentiel de récursivité lui-même (si je comprends bien). Pour afficher d'autres modèles définis, la section syn-contains
le contient.
:help syn-containedin
:help syn-contains
répliquée question de: Set item to higher highlight priority on vim
- 1. Comment faire en sorte que Vim entre automatiquement dans les caractères liés pendant le mode Insertion?
- 2. Comment faire en sorte que Magento supporte certains caractères français?
- 3. Vim mettant en évidence les régions imbriquées
- 4. Vim Mise en évidence ~/.vimrc
- 5. Comment puis-je faire en sorte que HttpServer reconnaisse les caractères spéciaux en Java?
- 6. rails vim mettant en évidence
- 7. Comment puis-je faire en sorte que VIM se comporte différemment pour différents types de fichiers?
- 8. Comment faire en sorte que Yardoc sorte vers STDOUT?
- 9. Comment faire pour que WPFToolkit DatePicker ne mette en surbrillance que la date sélectionnée?
- 10. Mettre en évidence les caractères accentués
- 11. En utilisant C#, est-il possible de faire en sorte que System.Data.OleDb gère les caractères spéciaux?
- 12. Comment puis-je faire en sorte que YouCompleteMe surligne les erreurs et les avertissements?
- 13. Comment faire en sorte que PHPMyAdmin affiche les avertissements MySQL?
- 14. Comment faire en sorte que Linq2Sql comprenne les types personnalisés?
- 15. Comment faire en sorte que Flexbox respecte les éléments supprimés?
- 16. Java - comment faire en sorte que les dépendances s'ignorent?
- 17. Comment puis-je faire en sorte que les vues ASP.NET MVC produisent des caractères Unicode correctement?
- 18. Comment faire en sorte qu'une application wxPython mette à jour et exécute constamment du code?
- 19. Comment faire en sorte que WordPress tinyMCE Editor ressemble à la mise en évidence du code Dreamweaver en mode HTML?
- 20. Essayer de faire en sorte que Unity mette en place des propriétés à partir d'un fichier de configuration
- 21. Comment puis-je faire en sorte que vim se souvienne du passé? (Ou configurez YankRing pour en faire moins.)
- 22. Comment puis-je faire en sorte qu'un JPanel se mette à jour une fois que la fenêtre défile?
- 23. Comment faire en sorte que ccnet mette à jour plusieurs projets de manière indépendante dans un même repo?
- 24. Mettre en évidence les mots
- 25. Tcl/s'attend à ce que regex mette en œuvre une sorte de tâche?
- 26. Comment puis-je faire en sorte que HTML Tidy ne mette pas la nouvelle ligne avant la fermeture des balises?
- 27. Mode visuel VIM: mettre en évidence les 2 derniers caractères de chaque ligne?
- 28. Vim met mal en évidence les expressions régulières "très magique" et "très nomagique"
- 29. Puis-je faire en sorte que vim respecte mes fichiers .gitignore?
- 30. Comment obtenir Vim pour mettre en évidence la syntaxe?
en décimal: '/ [^ \ d0- \ D127]' – Bohr
@Bohr C'est une belle addition. Je vais l'éditer ci-dessus. –
génial! sauvé le jour! un des caractères d'indentation a été collé dans mon code python et l'erreur unicode a commencé à me tuer. était difficile à détecter parmi le même personnage utilisé par vim plugin! – kollery