Vim ne prend pas les trémas comme caractères de mots

9

Lorsque j'écris un texte allemand contenant quelque chose comme abücdpar exemple et dans un dwdevant, il ne supprimera que le abcar il n'interprète pas ücomme un caractère de mot.

Lorsque je modifie reStructuredText, j'ai

iskeyword=38,42,43,45,47-58,60-62,64-90,97-122,_

Cela explique pourquoi les trémas ne sont pas marqués, mais je ne comprends pas d'où cela vient. Quand je viens d'ouvrir gVim, cela est réglé sur

iskeyword=@,48-57,_,192-255

D'où cela pourrait-il venir?

Martin Ueding
la source
3
Mettez set encoding=utf-8votre .vimrc.
cuonglm
C'est déjà dans mon .vim/vimrcet :set enc?me donne utf-8. Même chose avec fenc. Cela ne fonctionne toujours pas.
Martin Ueding
Après :set iskeyword&n'est ütoujours pas reconnu comme faisant partie d'un mot?
ryuichiro
Montrez comme votre mot clé ( set iskeyword). Ce devrait être quelque chose comme "@,48-57,_,128-167,224-235"ou "@,48-57,_,192-255". Utilisez-vous Vim ou Vi? (la valeur par défaut dans Vi ( "@,48-57,_") ne reconnaît pas ü; la valeur par défaut dans Vim est très bien)
JJoao
1
J'utilise gVim et l'ai iskeyword=@,48-57,_,192-255. Cela fonctionne maintenant comme par magie dans une nouvelle instance de Vim. C'est étrange, je dois observer cela plus attentivement.
Martin Ueding

Réponses:

5

Le @caractère dans iskeywordinclut tous les caractères pour lesquels isalpha()(fonction C) est VRAI; dans les implémentations libc modernes (20 dernières années), cela recherche également les caractères unicode.

Votre deuxième iskeywordutilise 97-122(az) et 64-90(AZ), qui n'inclut pas toutes les variantes avec les différents diacritiques (comme le tréma / tréma / tréma).

La solution est donc de remplacer 97-122et 64-90par @.

Ce funky iskeywordvient du fichier de syntaxe LISP; le rstfichier de syntaxe comprend un tas d'autres fichiers de syntaxe pour mettre en évidence les blocs de code.

Heureusement, vous pouvez définir les langues à inclure avec la g:rst_syntax_code_listvariable. La valeur par défaut est:

let g:rst_syntax_code_list = ['vim', 'java', 'cpp', 'lisp', 'php', 'python', 'perl']

Comme il est peu probable que vous ayez besoin de la coloration syntaxique LISP dans votre fichier reStructuredText, vous pouvez probablement le supprimer. Ajoutez-le simplement n'importe où dans votre fichier vimrc, s'il est défini, le fichier de syntaxe utilisera cette valeur au lieu de définir la sienne.

À mon avis, vous voudrez probablement utiliser:

let g:rst_syntax_code_list = []

Parce que qui sait quels effets secondaires géniaux provoquent les autres fichiers de syntaxe ...

Martin Tournoij
la source
Cool merci! Cela ne m'est pas arrivé jusqu'à présent sur Ubuntu, c'est seulement arrivé ici sur Fedora 22. Leurs fichiers de syntaxe sont probablement un peu différents. Ça fonctionne maintenant.
Martin Ueding
L'astuce avec le @statut des caractères alphanumériques a été très utile.
Zelphir Kaltstahl
1

Si l'on incorpore des grammaires provenant d'autres langues dans, par exemple, des fichiers de démarques, les paramètres de ces langues semblent remplacer les paramètres de la syntaxe de démarques. On peut vérifier si c'est le cas en utilisant:

:verbose set iskeyword?

Afin de résoudre ce problème, on peut définir une commande automatique à exécuter chaque fois que l'on entre dans un fichier de démarque (et probablement aussi dans d'autres langues):

autocmd BufEnter,BufNewFile *.md set iskeyword=38,42,43,45,47-58,60-62,_,@

Mettre cela dans mon .vimrcfixe le problème pour moi. J'utilisais la vim-pandocsyntaxe et les langues inline y compris racket, python, shet quelques - uns. Je pense qu'il n'est pas nécessaire de définir une commande automatique pour quitter les fichiers de démarque, car lorsque vous entrez des fichiers dans d'autres langues, leurs fichiers de syntaxe doivent définir leurs mots-clés, si je comprends bien.

Zelphir Kaltstahl
la source