2012-08-29 15 views
7

Próbuję napisać funkcję, która wywołuje setlocal ustawić kilka zmiennych do param (y), że przepustkę. Ale ja dostaję błąd Number required after =: tabstop=...Jak ustawić zmienne numeryczne funkcje vim

function! MyFunction(param) 
    setlocal tabstop=param 
    setlocal tabstop=a:param 
endfunction 

Obie linie zawiedzie. Czy brakuje mi jakiejś zmiennej interpolacji?

Odpowiedz

15

Musisz zdefiniować opcję jako zmienną &option. Na przykład:

fun! MyFun(param) 
    let &l:tabstop = a:param 
endfun 

Zobacz :help let-&. Numer &l: znajduje się nieco poniżej tego znacznika, co oznacza, że ​​jest równoważny z setlocal. Zasadniczo, gdy chcesz ustawić opcję wyrażenia zamiast zdefiniowanej wartości, musisz użyć let &option= zamiast set option=. Użyj let &l:option= zamiast setlocal option=. Istnieje również &g:option, aby ustawić opcję globalnie.

+2

Dobre wyjaśnienie na temat '& l:' i '& g:', ale ''tabstop'' jest lokalne do buforowania, więc nie ma potrzeby robienia' let & l: tabstop = a: param', prostego 'let & tabstop = a: param' zrobi. –

+0

Świetnie, dzięki @Conner! @PeterRincker ah, ale muszę ustawić również innych vars. Dzięki za heads-up. – jjt

+1

Dzięki! Spędziłem blisko godzinę, zastanawiając się, jak wykonać pierwszą funkcję vima, aby ustawić tabulator i shiftwidth w jednym poleceniu. Teraz jestem na dobrej drodze do marnowania całodziennego pisania funkcji vim ... – jbo5112

Powiązane problemy