русски - настройка vim




вызов vimscript или выполнение (3)

Короткий ответ

Вы можете увидеть call как сначала оценить выражение, а затем отбросить результат. Так что полезны только побочные эффекты.

Длинный ответ

Определение:

function! Foo()
    echo 'echoed'
    return 'returned'
endfunction

Вызов:

:call Foo()

Выход:

echoed

Выполнение:

:execute Foo()

Выход:

echoed
EXXX: Not an editor command: returned

Выполнение:

:silent let foo = Foo()
:echo foo

Выход:

returned

В vimscript, в чем разница между call и execute ? В каких сценариях / случаях использования я должен использовать один против другого?

(Отказ от ответственности, я знаю о обширной онлайн-помощи, доступной в vim - я ищу краткий ответ на этот конкретный вопрос).


Из опыта написания моих собственных плагинов и чтения кода других:

: call : используется для вызова функций:

function! s:foo(id)
    execute 'buffer' a:id
endfunction

let target_id = 1
call foo(target_id)

: execute : используется для двух вещей:

1) Построить строку и оценить ее. Это часто используется для передачи аргументов командам:

execute 'source' fnameescape('l:path')

2) Оцените возвращаемое значение функции (возможно, то же самое):

function! s:bar(id)
   return 'buffer ' . a:id
endfunction

let target_id = 1
execute s:bar(target_id)

  • :call : вызов функции.
  • :exec : выполняет строку как команду Ex. Он имеет аналогичное значение evaljavascript , python и т. Д.)

Например:

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

call Hello()

exec "call Hello()"






viml