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