在vimscript中,call
和execute
之间有什么区别?在什么情况下/用例我应该使用哪一个?
(免责声明,我知道vim中提供了广泛的在线帮助 - 我正在寻求对这个具体问题的简明回答。)
答案 0 :(得分:18)
:call
:调用函数。:exec
:执行字符串作为Ex命令。
它具有eval
的相似含义(javascript
,python
等)例如:
function! Hello()
echo "hello, world"
endfunction
call Hello()
exec "call Hello()"
答案 1 :(得分:16)
从编写我自己的插件和阅读其他人的代码的经验:
:致电:用于调用功能:
function! s:foo(id)
execute 'buffer' a:id
endfunction
let target_id = 1
call foo(target_id)
:执行:用于两件事:
1)构造一个字符串并对其进行评估。这通常用于将参数传递给命令:
execute 'source' fnameescape('l:path')
2)评估函数的返回值(可以说是相同的):
function! s:bar(id)
return 'buffer ' . a:id
endfunction
let target_id = 1
execute s:bar(target_id)
答案 2 :(得分:2)
您可能会看到{case (a,b,c)=>(c,a)}
首先评估表达式,然后丢弃结果。所以只有副作用才有用。
定义:
call
呼叫:
function! Foo()
echo 'echoed'
return 'returned'
endfunction
输出:
:call Foo()
执行:
echoed
输出:
:execute Foo()
执行:
echoed
EXXX: Not an editor command: returned
输出:
:silent let foo = Foo()
:echo foo
答案 3 :(得分:0)
请参阅Switch to last-active tab in VIM
例如
:exe“tabn”.g:lasttab
其中 g:lasttab是一个存储当前标签号的全局变量 并且该号码与“tabnext”连接以切换到例如标签号3 (如果g:lasttab例如包含'3')
整个字符串>“tabn”.g:lasttab< 由VIM的exec命令评估和执行。
HTH?