2009-11-24 2 views
0

J'ai un certain nombre de scripts (Ruby comme il arrive), je lance à partir VIM, en mettant en place le fichier de démarrage pour contenir (par exemple):VIM: ajouter automatiquement des éléments de menu-pour les scripts d'un répertoire particulier

amenu Ruby.script1 :%!ruby C:\ruby_scripts\script1.rb<cr><cr> 
amenu Ruby.script2 :%!ruby C:\ruby_scripts\script2.rb<cr><cr> 
... 

Ce que je voudrais faire, c'est que VIM vérifie automatiquement le répertoire C:\ruby_scripts et assigne automatiquement les éléments de menu - est-ce possible?

Répondre

1

Vous pouvez combiner glob() et exe avec quelque chose comme ceci:

let dirname = 'c:/ruby_scripts' 
for script in split(glob(dirname . '/*.rb')) 
    " Get the script name 
    let scriptname = fnamemodify(script, ':t:r') 
    let scriptfile = fnamemodify(script, ':p') 
    " Add the item to the menu 
    exe 'amenu Ruby.' . scriptname . ' :%!ruby ' . scriptfile . '<cr><cr>' 
endfor 

Pour plus d'informations, voir:

:help glob() 
:help split() 
:help fnamemodify() 
:help expand() 
:help :exe 
+0

excellent travail - merci! – monojohnny

1

Essayez:

function! s:AddScript(dir, menuname) 
    let files = lh#path#GlobAsList(a:dir, "*.rb") 
    for f in files 
    let n = fnamemodify(f, ":t:r") 
    exe "anoremenu ".a:menuname.".".n." :%!ruby ".f."<cr><cr>" 
    endfor 
endfunction 

call s:AddScript("c:/ruby_scripts", "Ruby") 

NB: lh#path#GlobAsList vient de lh-vim-lib . Avec un substitut(), vous serez capable de transformer le résultat de globpath() en la chaîne dont vous aurez besoin: execute.

+0

Impossible de faire fonctionner ceci sur mon installation de Vim - je suppose en raison du chemin de lh # # GlobAsList que vous avez mentionné: mais encore, merci beaucoup! – monojohnny

+0

Oui, cette fonction doit être installée avec son script dans le bon répertoire. Comme il offre plus de services dont vous n'avez pas besoin, la solution Al est plus que suffisante. –

Questions connexes