vim viml

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 de eval (en javascript , python , etc.)

Por ejemplo:

function! Hello() echo "hello, world" endfunction call Hello() exec "call Hello()"