用户命令可以是-complete=shellcmd
选项。事实证明这非常令人失望,因为它不是像vim的:!
命令的内置完成那样工作,而是重复完成路径中shell命令的名称。
我想编写一个命令来完成命令名称和文件。有没有一种方便的方法,可以使用内置的vim功能或通过插件?
答案 0 :(得分:1)
为什么不利用bash-completion而你呢?你应该能够使用/ etc / bash_completion来源分叉bash shell并通过管道与它交谈来查询它。那样你就拥有了所有的贝壳好东西。
当然,你可以像我一样做,并且 C-z 暂停Vim以退回你的shell。
答案 1 :(得分:0)
我最后写了一个名为shell_complete
的vim插件。它并不是真正的超级巨无霸,但它确实做了我想要的,或多或少地模仿:!
使用的完成。这就是说它是一种“伪shell完成”:它完成了第一个“word”的命令,以及那里的文件。基本的\
空间转义似乎没问题。
安装shell_complete
有点复杂,特别是对于那些不熟悉vim-addon-manager的人。插件有几个依赖关系,并且没有一个被“发布”,也就是说VAM还不知道它们。您可以通过安装(通过git clone
;请参阅文档以获取更多信息)让VAM了解这些内容,这是另一个我称之为tt_addons
的插件。无论如何,一旦你完成了这个,你应该只能:ActivateAddons tt_addons
然后:ActivateAddons shell_complete
。
如果您不使用VAM,则必须下载(或git clone
,更有可能)所有相关模块,然后将它们混合到您的vim目录中,或者将它们制作成病原体包,或者你有什么。如果您真的想要这样做,那么开始使用VAM可能值得您花些时间。如果你是某种谦逊的Luddite拒绝这样做的话,请告诉我,如果有不错的兴趣,我可能会把这件事放在vim.org上。
我认为很明显(至少从文档中)如何使用shell_complete
,但是如果你想看到它在行动中你可以查看我的reput
插件,它使用它来在:RePutShell
命令上完成。 reput
目前也只能通过github获得,并且相同的警告适用于通过VAM进行安装。
为了记录,我认为关于使用shell本身完成的建议完全是闪存。我实际上花了很长时间搞清楚如何做到这一点,并且已经确定它是可能的,至少在理论上是这样。我最初认为这样做比做shell_complete
更容易做到,但事实证明bash(如vim)没有提供任何编程方式来访问其完成工具,所以你最终在使用grep
和朋友抓取配置后,基本上必须在bash中重新实现它们。 Bash为这类事情吮吸了很多东西,所以我怯懦地拒绝参加这场战斗,至少目前是这样。
如果有人如此勇敢/愚蠢以至于采用这个标准,他们可能会利用chronicles of my travails。我设法让它完成由自定义完成功能处理的完成。然而,这只是这个难题的一小部分,因为bash还提供了大约6½种其他方式来完成。它确实补充了shell_complete提供的功能,因此将这两者合并为一种笨拙的,醉酒的vim shell完成的Voltron可能是值得的。