2 votes

Comment faire en sorte que vim rouvre vraiment un fichier en tant que fichier cpp ?

J'ai un fichier filename.fs avec un contenu syntaxique de type C. Vim l'ouvre comme une source Forth, et j'utilise :set syntax=cpp pour obtenir la mise en évidence correcte. Mais plus tard, lorsque j'essaie de passer d'un mot à l'autre, je m'aperçois que presque chaque ensemble de caractères est un mot, donc w va presque toujours jusqu'à la fin de la ligne. Je me suis dit que c'était lié à iskeyword et :verbose set iskeyword? me donne

iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
       Last set from /usr/share/vim/vim74/syntax/forth.vim

Il semble donc que ce soit également dû au suffixe de type Forth. J'essaie de faire set filetype=cpp mais cela ne m'apporte pas la valeur habituelle de isk comme @,48-57,_,192-255 . Il apparaît que les *.cpp -spécifique est fixé à partir de /usr/share/vim/vim74/debian.vim Il ne dépend donc pas de l'existence d'un fichier cpp . Mais si je fais par exemple :e newfile.cpp alors isk se voit attribuer cette valeur par défaut, même si, auparavant, je modifiais un fichier *.fs fichier.

Ma question est donc la suivante : comment puis-je (ré)ouvrir mon compte d'épargne-retraite ? *.fs comme un fichier non Forth, mais sans briser les valeurs par défaut des fichiers Forth réels et sans avoir besoin de définir manuellement le paramètre isk à la valeur souhaitée ?

2voto

jopa Points 800

Vous devez utiliser :setlocal filetype=cpp au lieu de :set syntax=cpp mais cela ne vous aide toujours pas.


Le problème est que 'iskeyword' est fixé à $VIMRUNTIME/syntax/forth.vim mais il n'utilise pas l'option b:undo_ftplugin pour l'annuler lorsque le type de fichier change (en cpp ), de sorte que l'option modifiée est maintenue.

Fixer A

Si vous n'avez jamais besoin de modifier *.fs comme Forth, vous pouvez ignorer la valeur par défaut de l'option détection du type de fichier . En fait, il s'agit de créer un fichier ~/.vim/filetype.vim avec le contenu suivant :

augroup filetypedetect
    au BufNewFile,BufRead *.fs         setf cpp
augroup END

Voir :help filetype-detect (et paragraphes suivants) pour plus de détails. Il s'agit de la configuration la plus efficace.

Fixer B

Vous pouvez également corriger l'omission par la syntaxe script via un fichier ~/.vim/ftplugin/forth.vim avec ces contenus :

let b:undo_ftplugin = 'setlocal iskeyword<'

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X