Используйте команду execute
. Все, что после него, является выражением, которое преобразуется в строку, которая затем выполняется как команда, введенная вами самим.
function Ls(dir)
execute '!ls ' . a:dir
endfunction
Это говорит: «Оцените выражение '!ls ' . a:dir
и затем выполните его». Переменная a:dir
раскрывается, точка объединяет две строки в '!ls whatever'
, а затем выполняется, как если бы вы ее набрали.