Vim Script: Kann in Zuordnungen auf scriptlokale Variablen verwiesen werden?

1065
Steve Vermeulen

Ich weiß, dass Sie sich auf scriptlokale Funktionen beziehen können, <SID>aber was ist mit scriptlokalen Variablen? Ich habe folgendes versucht und das Schlagen <c-space>schlägt fehl:

let s:testVar = "foo" function! s:GetTestVar() return s:testVar endfunction  nnoremap <space> :echo <SID>GetTestVar()<cr> nnoremap <c-space> :echo <SID>testVar<cr> 

Sie können dies umgehen, indem Sie Accessor-Funktionen schreiben (wie oben), aber manchmal wäre es schön, direkt darauf verweisen zu können.

3

2 Antworten auf die Frage

5
Ingo Karkat

Nein, skriptlokale Variablen sind in der Tat privat für das Skript. Sie müssen tatsächlich eine Accessor-Funktion schreiben.

In Plugins ist dies nicht so sehr ein Problem, da sie die Funktionen (und damit auch die Zustandsvariablen des Skripts) in Autoload- Skripts trennen sollten, sodass Zuordnungen / Befehle (im Pluginskript definiert ) ohnehin auf ein anderes Skript verweisen müssen .

2
dabyly

Ich wollte das ursprünglich kommentieren, brauche aber 50 Wiederholungen. Hier ist ein kleiner Vorschlag, und ich hoffe, es ist am Ziel.

Kann verwendet werden (innerhalb des Skripts, in dem die Variable definiert ist)

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

Ich verwende dies für das Einfügen von s: var-Pfaden in in meiner .vimrc definierten Zuordnungen. Lass es mich wissen, wenn ich den Punkt verpasst habe oder so ...

Beachten Sie, dass hierdurch der Wert der Variablen erfasst wird, wenn die Zeile ausgeführt wird, und nicht der Live-Wert, wenn das Mapping ausgelöst wird. Kevin Cox vor 5 Jahren 0