Как передать аргумент функции Vim команде?

#vim

#vim

Вопрос:

Я использую следующую функцию command для вызова отладчика в Vim:

 function! TermDebugArm(executable)
    packadd termdebug
    let g:termdebugger="arm-none-eabi-gdb"
    Termdebug a:executable
endfunction

command! -complete=file -nargs=1 TermDebugArm :call TermDebugArm(<f-args>)
 

К сожалению, Termdebug команда получает буквальный аргумент «a:executable», а не фактическое значение, которое оно должно представлять (т. Е. Имя файла, переданное команде, которая вызвала функцию).

Что я делаю не так?

Ответ №1:

Вам нужно использовать :execute команду для создания команды из строк, которая позволит вам использовать значение a:executable в качестве литерала:

 execute "Termdebug ".a:executable
 

Или вы можете использовать функцию :execute , которая будет объединять несколько аргументов с пробелом, поэтому вам не нужна явная конкатенация:

 execute "Termdebug" a:executable
 

Смотрите :help :execute .