Vim 脚本:是否可以在映射中引用脚本局部变量?

Ste*_*len 5 vim gvim vimscript

我知道您可以使用脚本本地函数来引用,<SID>但是脚本本地变量呢?我尝试了以下操作,但命中<c-space>失败:

let s:testVar = "foo"
function! s:GetTestVar()
  return s:testVar
endfunction

nnoremap <space> :echo <SID>GetTestVar()<cr>
nnoremap <c-space> :echo <SID>testVar<cr>
Run Code Online (Sandbox Code Playgroud)

您可以通过编写访问器函数(如上所述)来解决这个问题,但有时能够直接引用会很好。

Ing*_*kat 6

不,脚本局部变量确实是脚本私有的。您确实必须编写一个访问器函数。

在插件中,这不是什么大问题,因为它们应该将函数(以及脚本的状态变量)分离到自动加载脚本中,因此映射/命令(在插件脚本中定义)必须引用另一个脚本,无论如何.


小智 5

我本来想对此发表评论,但我需要 50 次代表。这是一个小建议,希望它符合目标。

可以使用(在定义 var 的脚本内)

exe "nnoremap <c-space> :echo ".s:testVar."<cr>"
Run Code Online (Sandbox Code Playgroud)

我将其用于 .vimrc 中定义的映射中的 s:var 路径插入。如果我错过了重点,或者其他什么,请告诉我......

  • 请注意,这将在执行该行时捕获变量的值,而不是在触发映射时使用“实时”值。 (2认同)