Vim Script: Czy w mapowaniach można odwoływać się do zmiennych lokalnych skryptów?

3

Wiem, że możesz odwoływać się do lokalnych funkcji skryptowych za pomocą <SID> ale co ze zmiennymi lokalnymi? Próbowałem tego i uderzając <c-space> zawiedzie:

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

nnoremap <space> :echo <SID>GetTestVar()<cr>
nnoremap <c-space> :echo <SID>testVar<cr>

Można to obejść, pisząc funkcje dostępu (jak powyżej), ale czasami byłoby miło móc odwoływać się bezpośrednio.

Steve Vermeulen
źródło

Odpowiedzi:

5

Nie, zmienne lokalne skryptu są rzeczywiście prywatne dla skryptu. Musisz rzeczywiście napisać funkcję akcesorium.

W wtyczkach nie jest to problem, ponieważ powinny oddzielać funkcje (a wraz z nimi zmienne stanu skryptu) na autoload skrypty, więc mapowania / polecenia (zdefiniowane w podłącz skrypt) i tak musi odnosić się do innego skryptu.

Ingo Karkat
źródło
2

Pierwotnie chciałem to skomentować, ale potrzebuję 50 rep. Oto mała sugestia i mam nadzieję, że będzie to cel.

możliwe do użycia (w skrypcie, w którym zdefiniowano var)

exe "nnoremap <c-space> :echo ".s:testVar."<cr>"

Używam tego do wstawiania ścieżki s: var w mapowaniach zdefiniowanych w moim .vimrc. Daj mi znać, jeśli tęsknię za czymś lub coś ...

dabyly
źródło
Należy zauważyć, że spowoduje to przechwycenie wartości zmiennej, gdy linia zostanie wykonana, a nie użycie wartości „na żywo” podczas wyzwalania odwzorowania.
Kevin Cox