Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

发现-complete=customlist,{func} 无法实现-complete=file的功能 #2

Open
Yggdroot opened this issue Jan 4, 2019 · 6 comments
Open

Comments

@Yggdroot
Copy link

Yggdroot commented Jan 4, 2019

比如有文件叫aaa/bbb.txt, aaa/ccc.txt,使用 :e aaa/<tab>, 可以补全。如果自己定义函数来实现,比如命令是:Edit, 当 :Edit aaa/<tab>时, wildmenu上出现bbb.txt和ccc.txt, 补全会把命令行变成 :Edit bbb.txt,也就是ArgLead是aaa/,ArgLead会被完全替换掉。要想补全成 :Edit aaa/bbb.txt, wildmenu上必须是aaa/bbb.txtaaa/ccc.txt

@wsdjeg
Copy link
Owner

wsdjeg commented Jan 5, 2019

是可以实现的,你可以看我前面实例里的内容,返回的内容需要有一定的规则。

@Yggdroot
Copy link
Author

Yggdroot commented Jan 5, 2019

你可能没有理解我的意思,返回的内容会显示在wildmenu上,会完全替换掉ArgLead的内容,想要正确补全必须返回整个路径,而不是只是文件名。

@wsdjeg
Copy link
Owner

wsdjeg commented Jan 5, 2019

@Yggdroot 我明白,在readme 已经说了 customlist 对返回值无要求,但是为了达到更好的体验,最好用筛选器筛选一下具有相同前缀的。

因此,当使用 customlist 时,需要在函数内根据 ArgLead 进行筛选,将函数该为如下,就可以得到相同效果了:

function! helloworld#complete(ArgLead, CmdLine, CursorPos) abort
    return filter(['hellolily', 'hellojeky', 'hellofoo', 'world'], 'v:val =~ "^" . a:ArgLead')
endfunction

@Yggdroot
Copy link
Author

Yggdroot commented Jan 5, 2019

你还是没理解我的意思呀,我是想wildmenu上只显示文件名,而不是整个路径,就像:e 命令一样补全。而自己定义函数,当路径是aaa/bbb/ccc/,wildmenu上是ddd.txt,补全只会使ddd.txt替换掉aaa/bbb/ccc/,而不是补在后面。你实现一下就知道了。

@wsdjeg
Copy link
Owner

wsdjeg commented Jan 5, 2019

我明白你的意思了,我试试

@wsdjeg
Copy link
Owner

wsdjeg commented Jan 5, 2019

确实不行,因为在使用 -complete=file 时, ArgLead 已经去除了问价分隔符以及前面的内容了,所以才不会出现在目录上

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants