J'ai récemment posé une question dans laquelle j'ai appris qu'il n'est pas possible de passer quoi que ce soit sauf des paramètres :set
dans les modélisations vim. Je comprends les problèmes de sécurité, mais je me demande s'il n'y a pas d'autre solution. Une question récente sur SO sur la définition de grands lots de paramètres pour se conformer à une norme de codage m'a fait réfléchir - serait-il possible de définir un "groupe" de choses dans mon fichier rc qui peuvent être activées ou désactivées à partir de la modélisation?
Excusez le pseudo-code, mais existe-t-il un moyen de créer une fonction déclenchée à partir d'un paramètre défini?
set_function! codestyle()
if &1 == 'psr-2'
set ts=4
set sw=4
endfi
if &1 == 'drupal7'
set ts=2
set sw=2
iab D8 Drupal 8
endif
endset_function
Cela pourrait alors être déclenché par une modeline telle que
# vim: codestyle=psr-2
Cela serait à certains égards similaire à la correspondance de type de fichier, mais permettrait des remplacements manuels. Cela permettrait également de configurer l'environnement de manière prédéfinie, en évitant les problèmes de sécurité liés à l'exécution d'un fichier par d'autres commandes arbitraires dans vim mais en permettant un environnement plus personnalisé. Y a-t-il un moyen de faire cela?
set
; AFAIK, ce n'est pas possible à Vim ...Réponses:
Vous avez quelques choix.
Première: vous pouvez écrire votre propre type de décodeur de modélisation, c'est-à-dire un plugin. C'est une réponse très similaire à celle que j'ai donnée à votre autre question.
En effet, nous ne pouvons pas ajouter de nouvelles options vim (qui peuvent être définies avec
:set
), mais nous pouvons ajouter de nouvelles variables. Et nous ne pouvons pas utiliser les modèles standard pour faire plus que de définir des options vim.Deuxième possibilité: let-modeline pourrait être exploitée via la fonction de rappel pour appeler une fonction ou une autre. Vous pourriez avoir votre
CodeStyle()
fonction dans votre.vimrc
ou un plugin (chargement automatique?), Puis avoir vos fichiers contient:Mais si votre besoin est aussi précis et si vous ne voulez vraiment pas de plugins comme local_vimrc , alors écrivez votre propre décodeur de type modeline.
La troisième, et l' OMI, meilleur choix dans ce cas serait de définir un nouveau type de fichier et ensemble
'ft'
à ce type de fichier en modelines avec:# vim: set ft=php.psr2
. Enphp
étant le type de fichier habituel global (je ne suis pas sûr de celui-ci), et enpsr2
étant le type de fichier spécialisé qui correspondra à vos styles de codage. Vous devrez définir deux ftplugins: ftplugin / psr2.vim et et ftplugin / drupal7.vim où vous placerez vos appels:setlocal
(et non:set
).la source