Shell命令完成

时间:2011-04-16 06:52:11

标签: vim tab-completion

用户命令可以是-complete=shellcmd选项。事实证明这非常令人失望,因为它不是像vim的:!命令的内置完成那样工作,而是重复完成路径中shell命令的名称。

我想编写一个命令来完成命令名称和文件。有没有一种方便的方法,可以使用内置的vim功能或通过插件?

2 个答案:

答案 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

为了记录,我认为关于使用shell本身完成的建议完全是闪存。我实际上花了很长时间搞清楚如何做到这一点,并且已经确定它是可能的,至少在理论上是这样。我最初认为这样做比做shell_complete更容易做到,但事实证明bash(如vim)没有提供任何编程方式来访问其完成工具,所以你最终在使用grep和朋友抓取配置后,基本上必须在bash中重新实现它们。 Bash为这类事情吮吸了很多东西,所以我怯懦地拒绝参加这场战斗,至少目前是这样。

如果有人如此勇敢/愚蠢以至于采用这个标准,他们可能会利用chronicles of my travails。我设法让它完成由自定义完成功能处理的完成。然而,这只是这个难题的一小部分,因为bash还提供了大约6½种其他方式来完成。它确实补充了shell_complete提供的功能,因此将这两者合并为一种笨拙的,醉酒的vim shell完成的Voltron可能是值得的。