可以为用户命令提供-complete=shellcmd
选项。事实证明这非常令人失望,因为它不是以与 vim 的命令内置完成相同的方式工作:!
,它只是重复完成路径中 shell 命令的名称。
我想编写一个完成命令名称和文件的命令。有没有一种方便的方法来做到这一点,无论是使用内置的 vim 功能还是通过插件?
可以为用户命令提供-complete=shellcmd
选项。事实证明这非常令人失望,因为它不是以与 vim 的命令内置完成相同的方式工作:!
,它只是重复完成路径中 shell 命令的名称。
我想编写一个完成命令名称和文件的命令。有没有一种方便的方法来做到这一点,无论是使用内置的 vim 功能还是通过插件?
为什么不使用 bash-completion 呢?您应该能够派生一个带有 /etc/bash_completion 来源的 bash shell,并通过管道与它交谈以询问它。这样你就拥有了所有的外壳好东西。
当然,你可以像我一样C-z暂停 Vim 以返回到你的 shell。
我最终编写了一个名为.vim 的插件shell_complete
。它并不是真正的超级超级棒,但它确实做了我一直在寻找的事情,即或多或少地模拟了:!
. 这就是说它是一种“伪shell完成”:它完成第一个“单词”的命令,并从那里完成文件。空间的基本\
转义似乎工作正常。
安装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 安装。
作为记录,我认为sehe关于使用shell本身完成完成的建议完全是闪光的。实际上,我花了很长时间弄清楚如何做到这一点,并确定这是可能的,至少在理论上是这样。我最初认为以这种方式执行此操作比执行操作更容易shell_complete
,但事实证明 bash(如 vim)不提供任何编程方式来访问其完成设施,因此您最终基本上不得不重新实现它们在bash中,使用grep
和朋友抓取配置后。Bash 在这种事情上很糟糕,所以我懦弱地拒绝参加这场战斗,至少目前是这样。
如果有人如此勇敢/愚蠢地接受这个标准,他们可以利用我的苦难编年史。我设法让它完成由自定义完成函数处理的完成。然而,这只是难题的一小部分,因为 bash 还提供了大约 6½ 种其他方法来完成。它确实补充了 shell_complete 提供的功能,因此将两者协同合并成一种尴尬的、醉酒的 vim shell 完成的 Voltron 可能是值得的。