vim中的子功能

时间:2011-06-25 08:54:54

标签: function vim

我在menu.vim中创建了很多函数。

我注意到在许多函数中使用了相同的代码,这就是为什么我决定使用它来清理我的文件 子功能。

p.e这是我的函数经常返回的代码:

let zoek = @/    
if a:type == "'<,'>"    
 let r = substitute(zoek, '\\%V', '', 'g')    
elseif a:type == "%"    
 let r = zoek    
endif    

let a = substitute(r, '\', '', 'g')      

if matchstr(d, '>') == '>' || matchstr(d, '<') == '<'     
 let e = substitute(d, '\zs>\(\d\+\)%<\ze', '\1-', 'g')     
endif

如何从中创建子功能?我怎么能调用呢? Vim有子功能吗?

2 个答案:

答案 0 :(得分:4)

您可以通过在字典中定义它们来使用«local»函数:在以下代码中

function MyFunc()
    let d={}
    function d.function()
        echo "Foo"
    endfunction
    call d.function()
endfunction

函数d.function只能在s:MyFunc中访问,并在s:MyFunc退出后销毁。我将«local»放在引号中,因为d.function实际上是名为42的全局函数(或其他数字,无关紧要)。 如果没有引用它就无法调用创建引用的唯一方法是使用function dict.key()(引用可以在创建后复制,但不能使用调用创建引用至function()MyFuncfunction("MyFunc")可能。请注意,每次创建函数时,数字(在本例中为42)都会递增,并且我既不知道最大数字是什么,也不知道什么是最大数字。我个人使用字典功能,因为它们还有两个优点:

  1. 如果没有调试器或在某处显式传递函数引用(可能作为其容器的一部分),则无法访问脚本本地字典中定义的字典函数。
  2. 如果在字典中定义了多个函数以便清除它们,您只需要取消此字典。用于重新加载插件。

答案 1 :(得分:2)

Vimscript中只有一种类型的功能,但我不确定这是否是您在menu.vim中使用的功能。因此定义了用户定义的函数:

    function! MyNewFunction()
        " your code here
    endfunction

然后,您可以使用

在脚本(以及其他函数内)的其他位置调用此函数
    call MyNewFunction()

或使用

将变量设置为等于函数的返回值
    let my_variable = MyNewFunction()

当然,这是一个非常简单的概述,因为你说你已经在使用功能了。更多信息,包括变量的使用,在这里:

    help user-functions

如果我没有回答你的问题,请道歉。