VIM:自动为特定目录中的脚本添加菜单项

时间:2009-11-24 12:42:52

标签: vim scripting loops

我有许多脚本(Ruby发生)我从VIM运行,通过设置启动文件来包含(例如):

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

我想做的是让VIM自动检查C:\ruby_scripts目录并自动分配菜单项 - 是否可以这样做?

2 个答案:

答案 0 :(得分:1)

您可以将glob()exe合并为以下内容:

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

有关详细信息,请参阅:

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

答案 1 :(得分:1)

尝试:

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")

注意:lh#path#GlobAsList来自lh-vim-lib。使用substitute(),您应该能够将globpath()结果转换为您需要执行的字符串: