我正在尝试将一些全局变量传递给vim脚本中的函数。但是,一旦传递给函数,我最终会收到变量名,而不是实际的变量值。这是一个简单的案例:
let g:my_var_a = "melon"
let g:my_var_b = "apple"
" Define the main function
function! MyFunc(myarg1, myarg2)
echom "Arguments: " . a:myarg1 . ", " . a:myarg2
endfunction
" Link the function to a command
command! -nargs=* HookMyFunc call MyFunc(<f-args>)
" Link the command to a plug
nnoremap <unique> <Plug>MyHook :HookMyFunc g:my_var_a g:my_var_b<CR>
" Assign a key to the plug
nmap <silent> <leader>z <Plug>MyHook
所以,如果我这样做:nnoremap <unique> <Plug>MyHook :HookMyFunc melon apple<CR>
我得到了输出:Arguments: melon apple
当我这样做时:nnoremap <unique> <Plug>MyHook :HookMyFunc g:my_var_a g:my_var_b<CR>
我的输出是Arguments: g:my_var_a g:my_var_b
在将这些变量传递给函数时评估这些变量的方法是什么?
答案 0 :(得分:4)
您需要使用:execute
评估该行,以便它变为:
nnoremap <unique> <Plug>MyHook :execute 'HookMyFunc ' . g:my_var_a . ' ' . g:my_var_b<CR>
将此视为构建字符串然后评估(/执行)它。
如需更多帮助,请参阅::h :exe