Подтвердить что ты не робот

Vimscript call vs. execute

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

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

4b9b3361

Ответ 1

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

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

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

let target_id = 1
call foo(target_id)

: выполнить. Используется для двух вещей:

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)

Ответ 2

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

Например:

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

call Hello()

exec "call Hello()"

Ответ 3

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

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

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

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

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

Вызов:

:call Foo()

Вывод:

echoed

Execute:

:execute Foo()

Вывод:

echoed
EXXX: Not an editor command: returned

Execute:

:silent let foo = Foo()
:echo foo

Вывод:

returned

Ответ 4

См. Переключиться на последнюю активную вкладку в VIM

например

: exe "tabn".g: lasttab

Где g: lasttab - глобальная переменная для хранения текущего номера табуляции и это число объединяется с "tabnext" для переключения, например, на вкладку номер 3 (Если g: lasttab, например, содержит "3", например)

Эта целая строкa > "tabn".g: lasttab < оценивается и выполняется командой VIM exec.

НТН?