Как добавить шаблон вроде '. *' К аргументам командной строки для пользовательских команд - PullRequest
1 голос
/ 06 мая 2020

Я хотел бы добавить шаблон типа .* к аргументу определяемой пользователем команды, чтобы пользователю не приходилось вводить его каждый раз.

Вот минимальный рабочий пример для воспроизведения проблемы:

fun Fruits(A, L, P)
  let l:valid_fruits = ['apple', 'peach', 'orange', 'mango', 'blackberry', 'strawberry', 'blueberry']

  let l:filtered_fruits = filter(l:valid_fruits, { idx, val -> val =~ a:A })

  return join(l:filtered_fruits, "\n")
endf
command! -complete=custom,Fruits -nargs=1 Fruits :echom(<f-args>)

С его помощью я могу набрать :Fruits b и нажать Tab, чтобы показать варианты завершения blackberry и blueberry, все в порядке. Но мне нужно поведение, при котором я делаю :Fruits berry и нажимаю вкладку, чтобы показать blackberry, blueberry и strawberry. Один из способов добиться такого поведения - использовать префикс .* в аргументе командной строки, например: :Fruits .*berry.

Итак, наивно, я пошел и обновил свою фильтрацию, как показано ниже:

let l:filtered_fruits = filter(l:valid_fruits, { idx, val -> val =~ '.*'.a:A })

Но это не сработает, и я не мог полностью понять, почему, я считаю, что мне не хватает чего-то небольшого (и, вероятно, глупого), но может кто-нибудь указать, пожалуйста?

...