Добавление и удаление каталога в пути импорта интерпретаторов vim - PullRequest
2 голосов
/ 13 марта 2011

Что такое mzscheme эквивалент следующих кодов?

  • python:

    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:

    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 Ответ

2 голосов
/ 25 июля 2012

Это зависит от того, что вы хотите сделать со своим сценарием. 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 в предоставленном каталоге. Примечание: я не тестировал этот код, так как не могу найти версию vim, в которой встроена поддержка Racket.

Документацию по интерфейсу vim можно найти в Racket здесь . Общая документация по ракетке здесь .

...