添加和删​​除目录到vim解释器的导入路径

时间:2011-03-13 15:39:33

标签: vim scheme racket

以下代码的mzscheme等价物是什么?

  • 蟒:

    python import sys, vim
    python sys.path.append(vim.eval("var"))
    <...>
    python sys.path.remove(vim.eval("var"))
    
  • perl的:

    perl push @INC, [VIM::Eval("var")]->[1];
    <...>
    perl @INC=(grep {$_ ne VIM::Eval("var")} @INC);
    
  • LUA:

    let str=';'.var.'/?.lua;'.var.'/?/init.lua'
    lua package.path=package.path..vim.eval("str")
    <...>
    let ppath=[]
    lua vim.eval("add(ppath,"..string.format("%q", package.path)..")")
    let importidx=stridx(ppath[0], str)
    let importendidx=importidx+len(str)
    let ppath[0]=((importidx>0)?(ppath[0][:(importidx-1)]):("")).
                \ppath[0][(importendidx+1):]
    lua package.path=vim.eval("ppath[0]")
    
  • 红宝石:

    ruby $LOAD_PATH << VIM::evaluate("var")
    <...>
    ruby $LOAD_PATH.delete(VIM::evaluate("var"))
    
  • TCL:

    silent tcl lappend auto_path [::vim::expr "dir"]
    <...>
    silent tcl set auto_path
                \ [lreplace $auto_path
                \ {*}[lrepeat 2
                \ [lsearch -exact $auto_path
                \ [::vim::expr "a:fdict.imported"]]]]
    

1 个答案:

答案 0 :(得分:2)

这取决于您要对脚本执行的操作。 Racket(它现在已经很长时间没有被称为“mzscheme”)与模块一起使用,所以你很少使用“添加动态加载路径的路径”这种工作流程。相反,模块是使用核心库集合中的require表单或您安装的软件包导入的。

如果确实需要动态加载内容,则可以选择设置current-directory参数,然后使用dynamic-require

(require (prefix-in vim- vimext))
(parameterize ([current-directory (vim-eval "var")])
  (define add (dynamic-require "add.rkt" 'add)))

dynamic-require将从提供的目录中的add文件中提取add.rkt函数。注意:我没有测试过这段代码,因为我找不到编译了Racket支持的vim版本。

您可以在Racket here中找到vim界面的文档。 Racket here的一般文档。