Vim: Llame a un comando de ex (conjunto) de la función?
Pregunta
Dibujo un espacio en blanco en esto, y Google no era útil.
¿Quieres hacer una función como esta:
function JakPaste()
let tmp = :set paste?
if tmp == "paste"
set nopaste
else
set paste
endif
endfunction
map <F2> :call JakPaste()<CR>
Sin embargo, esto no funciona. He aislado la línea quebrada:
function JakPaste()
let tmp = set paste?
endfunction
map <F2> :call JakPaste()<CR>
Al presionar F2 resultados en este error:
Error detected while processing function JakPaste:
line 1:
E121: Undefined variable: set
E15: Invalid expression: set paste?
Hit ENTER or type command to continue
¿Cómo debo llamar a un comando de ex (conjunto) de una función vim?
Este parece algo relevante, sin embargo todavía no lo entiendo.
Solución
La razón esto no funciona es que usted está tratando de ejecutar un comando en una expresión - esas son cosas diferentes. La construcción ?
que utiliza las causas justas vim a hacerse eco del valor de la opción; esto no es lo mismo que una función que devuelve el valor. Para que quede claro:. El problema no es que se está llamando a un comando de una función ex - cada línea de la función es un comando de ex - es así que está llamando el comando ex en una expresión
Sin embargo, esa no es la forma correcta de llevar a cabo la tarea que se está tratando aquí. Aquí está el camino más corto, gracias a la observación de rampion:
set paste!
Ahora, si alguna vez necesitas algo inteligente que simplemente invirtiendo un valor lógico, puede utilizar &
para convertir un nombre de opción en una variable utilizable. Aquí hay dos maneras de utilizar que:
" still a function, good for taking extra action (here, printing notification)"
function TogglePaste()
if (&paste)
set nopaste
echo "paste off"
else
set paste
echo "paste on"
endif
endfunction
" just set the variable directly"
let &paste = !&paste