Llamada vimscript vs. Ejecutar
viml (4)
Respuesta corta
Puede ver la call
como primero evaluar la expresión y luego descartar el resultado. Así que solo los efectos secundarios son útiles.
Respuesta larga
Definir:
function! Foo()
echo ''echoed''
return ''returned''
endfunction
Llamada:
:call Foo()
Salida:
echoed
Ejecutar:
:execute Foo()
Salida:
echoed
EXXX: Not an editor command: returned
Ejecutar:
:silent let foo = Foo()
:echo foo
Salida:
returned
En vimscript, ¿cuál es la diferencia entre call
y execute
? ¿En qué escenarios / casos de uso debo usar uno frente al otro?
(Descargo de responsabilidad, soy consciente de la amplia ayuda en línea disponible dentro de vim; estoy buscando una respuesta concisa a esta pregunta específica).
Consulte Cambiar a la última pestaña activa en VIM.
por ejemplo
: exe "tabn" .g: lasttab
Donde g: lasttab es una variable global para almacenar el número de pestaña actual y ese número se concatena con "tabnext" para cambiar, por ejemplo, a la pestaña número 3 (si g: lasttab, por ejemplo, contiene ''3'')
Toda la cadena> "tabn" .g: lasttab <se evalúa y ejecuta mediante el comando exec de VIM.
HTH?
De la experiencia de escribir mis propios complementos y leer el código de otros:
: llamada : usado para llamar a funciones:
function! s:foo(id)
execute ''buffer'' a:id
endfunction
let target_id = 1
call foo(target_id)
: ejecutar : usado para dos cosas:
1) Construir una cadena y evaluarla. Esto se usa a menudo para pasar argumentos a los comandos:
execute ''source'' fnameescape(''l:path'')
2) Evaluar el valor de retorno de una función (posiblemente el mismo):
function! s:bar(id)
return ''buffer '' . a:id
endfunction
let target_id = 1
execute s:bar(target_id)
-
:call
: llamar a una función. -
:exec
: ejecuta una cadena como un comando Ex. Tiene el significado similar deeval
(enjavascript
,python
, etc.)
Por ejemplo:
function! Hello()
echo "hello, world"
endfunction
call Hello()
exec "call Hello()"