Obtenha o preenchimento automático de nomes de script em $ PATH

Sep 24 2020

Gostaria de saber como posso configurar o preenchimento automático de nomes de script no vim?

Por exemplo, digamos que eu tenha myscript.shem ~/bine ~/binesteja em meu $ PATH, gostaria de digitar mysvim e obter o preenchimento automático. Acho que deveria ser possível com CTRL-X CTRL-Uou, CTRL-X CTRL-Omas não sei como.

Nota: Eu já tenho um preenchimento Omni configurado por let & runtimepath apontando para um diretório de programa vim.

Obrigado pela ajuda !

Respostas

2 D.BenKnoble Sep 24 2020 at 20:32

Uma maneira é escrever um completador personalizado:

function ShellCmd(findstart, base) abort
  if a:findstart
    " ... some logic here to find the start of a word
    " ... example near `:help E839`
  else
    return split($PATH, ':')
          \ ->map({_,v -> glob(v.'/*', v:true, v:true, v:true)})
          \ ->flatten()
          \ ->map({_,v -> fnamemodify(v, ':t')})
          \ ->filter({_,v -> v =~# a:base})
  endif
endfunction

Se você deseja corresponder apenas os comandos que começam com a:base, deve alterar o último filtro para v =~# '^'.a:base.

Atribuir completefunce usar <C-x><C-u>.


Ao escrever um comando personalizado, você pode usar -complete=shellcmd.