自定义命令完成

时间:2015-07-27 13:57:54

标签: vim

我正在尝试编写一个插件,b:Sdir将使用源代码获取目录。我试图实现自动完成:

"MakeMake: Generate Makefile.gen
function! MakeMake()
  let b:Rdir = input("Project root folder: ", ".", 'file')
  exe ":lchdir ".b:Rdir

" More than 1 files can be choosed
  let b:Sdir = input("Choose source dir: ", ".", "customlist,CFile")
endfunction

function! CFile(A,L,P)
  return split(globpath(b:Rdir, a:A),"\n")
endfunction

但这不起作用。 正常情况下,如果我在split(globpath(b:Rdir, "*"),"\n")中使用“CFile”,则会显示目录中的所有文件,但不会过滤文件。

我怎样才能完成这项工作?

1 个答案:

答案 0 :(得分:2)

你需要一个更好的水珠模式。您的模式只会搜索完全匹配。因此,最后添加一个通配符和/

return split(globpath(b:Rdir, a:A . '*/'), "\n")

您可能希望更进一步,删除globpath()通过map()返回的起始目录:

return map(split(globpath(b:Rdir, a:A . '*/'),"\n"), 'v:val[strlen(b:Rdir)+1: -1]')

甚至更好,忘记自定义完成,只需使用dir。例如input("Choose source dir: ", ".", "dir")

如需更多帮助,请参阅:

:h globpath()
:h glob()
:h :command-complete