我有许多脚本(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
目录并自动分配菜单项 - 是否可以这样做?
答案 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()结果转换为您需要执行的字符串: