vimscript调用与执行

noa*_*hlz 24 vim viml

在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)

  • 您可能希望显示使用exec和字符串连接构建ex命令的示例. (2认同)

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)