我在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有子功能吗?
答案 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()
,MyFunc
:function("MyFunc")
可能。请注意,每次创建函数时,数字(在本例中为42)都会递增,并且我既不知道最大数字是什么,也不知道什么是最大数字。我个人使用字典功能,因为它们还有两个优点:
答案 1 :(得分:2)
Vimscript中只有一种类型的功能,但我不确定这是否是您在menu.vim中使用的功能。因此定义了用户定义的函数:
function! MyNewFunction()
" your code here
endfunction
然后,您可以使用
在脚本(以及其他函数内)的其他位置调用此函数 call MyNewFunction()
或使用
将变量设置为等于函数的返回值 let my_variable = MyNewFunction()
当然,这是一个非常简单的概述,因为你说你已经在使用功能了。更多信息,包括变量的使用,在这里:
help user-functions
如果我没有回答你的问题,请道歉。