Comment puis-je empêcher Vim de diviser mes mots en morceaux?

8

Les utilisateurs de langue anglaise n'ont probablement pas ce problème, mais vim est assez stupide en ce qui concerne les expressions régulières. Dans mon cas, la plupart des lettres de l'alphabet turc en dehors de l'alphabet EN ne semblent pas être qualifiées de caractères de mot.

Étant donné un document qui contient un mot turc:

gerçekleşiyor

L'expression de recherche

/ger\wek

… Ne correspondra pas au début du mot. Pour une raison quelconque, ç n'est pas un caractère de mot.

Cela devient exaspérant lorsque les plugins sont utilisés \wdans le cadre de leur répertoire d'expression régulière. Un exemple typique est neocompcache(que j'utilise au lieu de neocompleteparce qu'il est compatible avec Neovim). À l'exception des jeux de règles de correspondance supplémentaires pour une syntaxe de langue, la saisie semi-automatique ne se produit que dans des blocs de taille de mot. Lorsque j'écris de grandes quantités de prose turque, il serait en fait pratique d'avoir une saisie semi-automatique fonctionnelle, mais avec la plupart des mots étant divisés en petits morceaux avec les caractères turcs laissés de côté, cela est au-delà de l'inutilité.

Comment puis-je convaincre vim (de préférence neovim si cela est important) d'accepter une plus grande gamme de caractères en tant que caractères "word"?

Caleb
la source
Quel encodage et encodage de fichiers utilisez-vous?
cxw
@cxw utf-8dans tous les domaines . Et oui, il est défini dans ces deux paramètres.
Caleb
1
Vous avez identifié cette question comme neovim . Je vous suggère d'ouvrir un problème dans le suivi des problèmes de NeoVim, s'il n'y en a pas déjà un. Cela ne sera probablement pas résolu à court terme, mais ce sera le cas ... Vous pouvez également essayer de poster un message à vim_dev à ce sujet, mais je soupçonne que tout le monde conviendra que quelque chose doit être fait, après quoi rien changements.
Martin Tournoij
@Carpetsmoker Neovim Problème ouvert .
Caleb

Réponses:

5

\west explicitement raccourci pour [0-9A-Za-z_]. Utilisez-le à la \kplace si vous souhaitez faire correspondre les caractères Unicode en dehors de cette plage. Par exemple, /ger\kekcorrespond gerçekleşiyor.

Soit dit en passant, neocomplete en est conscient mais ne l' utilise pas intentionnellement \k(par défaut) en raison de problèmes de performances. Vous pouvez modifier le g:neocomplete#keyword_patternsparamètre de neocomplete . Voir également:

https://github.com/Shougo/neocomplete.vim/issues/207

Justin M. Keyes
la source
4

Il semble qu'il n'y ait pas de moyen facile de redéfinir \w. Voir, par exemple, les expressions régulières Vim regex correspondent à des non-mots et correspondent à des mots contenant des caractères au-delà de a-zA-Z .

Cependant, vous pourriez être en mesure d'utiliser une gamme personnalisée si vous ne me dérange pas retaper régulièrement (ha): [a-zA-Z\%u00c7-\%u015f]. Cela correspondra malheureusement à de nombreux caractères non turcs également, mais si ces caractères n'apparaissent pas dans votre texte, cela pourrait être OK.

cxw
la source
1
Malheureusement, je ne contrôle pas tous les endroits où ces expressions régulières sont utilisées. Un certain nombre de plugins utilisent \wet donc ils tombent tous en ce qui concerne cela. Plutôt que de patcher tous les jours (si je peux même retrouver les coupables), il serait plus facile pour moi de patcher vim pour que ça \wmarche. Bah.
Caleb