在vimscript中,call
和之间有什么区别execute
?在什么情况下/用例我应该使用哪一个?
(免责声明,我知道vim中提供了广泛的在线帮助 - 我正在寻求对这个具体问题的简明回答).
kev*_*kev 19
:call
:调用一个函数.:exec
:执行字符串作为Ex命令.它具有的类似含义eval
(中javascript
,python
等)例如:
function! Hello()
echo "hello, world"
endfunction
call Hello()
exec "call Hello()"
Run Code Online (Sandbox Code Playgroud)
mhi*_*inz 18
从编写我自己的插件和阅读其他人的代码的经验:
:call:用于调用函数:
function! s:foo(id)
execute 'buffer' a:id
endfunction
let target_id = 1
call foo(target_id)
Run Code Online (Sandbox Code Playgroud)
:execute:用于两件事:
1)构造一个字符串并对其进行评估.这通常用于将参数传递给命令:
execute 'source' fnameescape('l:path')
Run Code Online (Sandbox Code Playgroud)
2)评估函数的返回值(可以说是相同的):
function! s:bar(id)
return 'buffer ' . a:id
endfunction
let target_id = 1
execute s:bar(target_id)
Run Code Online (Sandbox Code Playgroud)