Discussion:
[vim] fonctions dans un ftplugin
(trop ancien pour répondre)
mpg
2009-05-01 12:17:47 UTC
Permalink
Bonjour,

Dans certains ftplugin, je definis des fonctions. Je m'y prends
visiblement mal, parce que quand j'ouvre plusieurs buffers sur des
fichiers ayant le même type, j'ai des avertissemens comme quoi les
fonctions que j'essaie de définir sont déjà définies.

Je pensais pouvoir éviter ce problème en rendant les fonctions locales
au script comme ceci :

function s:FooBar()

mais visiblement ça ne marche pas. Je pourrais bien sûr utilsier
function!, mais ça ne me semble pas du tout une bonne solution.

Comment gérer ce genre de choses ?
--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/
Manuel Pégourié-Gonnard
2009-05-27 11:23:42 UTC
Permalink
Bonjour,

devant l'absence prolongée de réponse à la question ci-dessous je
m'interroge. Ma question est-elle
- mal posée,
- inintéressante ou triviale,
- insoluble,
- autre ?
Post by mpg
Bonjour,
Dans certains ftplugin, je definis des fonctions. Je m'y prends
visiblement mal, parce que quand j'ouvre plusieurs buffers sur des
fichiers ayant le même type, j'ai des avertissemens comme quoi les
fonctions que j'essaie de définir sont déjà définies.
Je pensais pouvoir éviter ce problème en rendant les fonctions locales
function s:FooBar()
mais visiblement ça ne marche pas. Je pourrais bien sûr utilsier
function!, mais ça ne me semble pas du tout une bonne solution.
Comment gérer ce genre de choses ?
--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/
Luc Hermitte
2009-05-27 16:11:15 UTC
Permalink
Salut,

[La question est: résolue depuis longtemps, mais je passe ici assez
rarement. Désolé ^^']

Les ftplugins sont chargés à chaque fois qu'un buffer d'un ft donné
est ouvert pour la première fois.

En vrac:

Du coup pour éviter que la zone globale soit rechargée à chaque fois,
il lui mettre en place un garde anti-reinclusion pour la zone des
définitions globales.

Celui pour la portée locale n'est pas nécessaire, mais elle sert à
éviter de recharger par erreur (/en double sur un :runtime) un
ftplugin.

N'utilise pas b:did_ftplugin (ou assimilé) pour tes gardes. C'est un
garde à réserver aux ftplugin uniques (par ft) et officiels. Quand on
commence à avoir plus d'un ftplugin par ft (je dois en avoir plus
d'une trentaine uniquement pour le C++) ce garde se révèlera
conflictuel.

Vu que lorsque l'on maintien un ftplugin on a souvent besoin de le
recharger, pense à mettre en place un moyen de passer outre les
gardes, et de permettre que certaines choses puissent être redéfinies
(pas au sens OO). Pour les maps et abréviations il n'y a rien de plus
à faire (que de mettre un <buffer>). Pour les fonctions et les
commandes, il faut leur rajouter un '!'.

Pour les fonctions, je t'invite à préférer les autoload plugins qui
chargeront les fonctions uniquement au besoin. Typiquement, tu pourras
les stocker dans {rtp}/autoload/{tes-initiales}/{filetype}/.

Pour des exemples de ftplugins, tu peux regarder ceux sur mon site (cf
ma signature), ou la vieille présentation pré-v7 que j'avais donnée
(<http://hermitte.free.fr/vim/ressources/vim-config.pdf>)

--
Luc Hermitte
http://lh-vim.googlecode.com/
http://hermitte.free.fr/vim/
Manuel Pégourié-Gonnard
2009-05-28 12:16:39 UTC
Permalink
Post by Luc Hermitte
[La question est: résolue depuis longtemps, mais je passe ici assez
rarement. Désolé ^^']
Il n'y a vraiment pas de quoi être désolé. Merci pour cette réponse, qui
répond à toutes mes questions, et que je vais mettre en pratique
prochainement.
--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/
Loading...