2012-08-29 14 views
7

Estoy intentando escribir una función que llama setlocal para establecer algunas variables para el parámetro (s) que me pase. Pero estoy consiguiendo el error Number required after =: tabstop=...Cómo establecer variables numéricas en las funciones vim

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

Ambas líneas fallarán. ¿Hay algún tipo de interpolación variable que me falta?

Respuesta

15

Debe definir la opción como una variable &option. Por ejemplo:

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

Ver :help let-&. El &l: se encuentra un poco debajo de esa etiqueta que muestra que es para el equivalente de setlocal. Básicamente, cuando desea establecer una opción para una expresión en lugar de un valor definido, entonces necesita usar let &option= en lugar de set option=. Use let &l:option= en lugar de setlocal option=. También hay &g:option para establecer la opción globalmente.

+2

Buena explicación sobre '& l:' y '& g:', pero ''tabstop'' es local para el buffer así que no hay necesidad de hacer un' let & l: tabstop = a: param', un simple 'let & tabstop = a: param' hará. –

+0

Genial, gracias @Conner! @PeterRincker ah, pero tengo que configurar otros vars también. Gracias por los avisos. – jjt

+1

¡Gracias! Pasé cerca de una hora averiguando cómo hacer mi primera función vim para simplemente establecer tabstop y shiftwidth en un comando. Ahora estoy en camino de perder todo el día escribiendo funciones vim ... – jbo5112

Cuestiones relacionadas