Vim插件 - 在命令模式下自定义自动完成params

Kri*_*röm 8 vim vim-plugin

我正在写我的第一个vim插件(viml + python).插件的一个命令是"GetStepCommand()",它基本上从远程数据源获取数据,我稍微按下数据并将其复制到缓冲区中,以便用户可以开始编辑它.用户必须提供一个参数"GetStepsCommand",这是数据所在的搜索路径,例如:/ projects/procedure/step

现在,这条路可能很长,很容易错过拼写的东西.所以我想为参数部分实现自己的tab-completion.Vim已经负责通过tabbing自动完成命令,但当然它不知道如何完成参数(我将自己解决).

但首先我需要知道: - 如果/我怎样才能在命令模式拦截按键 - 取/获取命令行用户当前正在写 - 测试,如果它在命令模式或插入/视图模式 - 和最后返回一个更新的命令行(制表符完成),用户可以在按键后继续写入':'.

任何指针,提示,文章,教程......即非常感谢信息

Ing*_*kat 6

当您的自定义命令的参数是文件系统路径时,只需添加-complete=file到您的:command定义,如下所示:

:command -nargs=1 -complete=file MyCommand echomsg <q-args>
Run Code Online (Sandbox Code Playgroud)

你不需要在命令行模式下拦截按键(你不应该,因为这会导致与其他插件的错误交互!)Vim提供其他默认完成(cp.:help :command-complete),甚至是Vimscript函数的自定义完成调用以确定候选人的完成情况.

  • @KristofferNordström关于这个特定完成类型的一个注释:`-complete = file`除了名称之外不是完成选项.它将完成文件的完成工作,**将扩展环境变量,将阻止你输入非转义空间**(通常使用`-nargs = 1`和`MyCommand ab`参数将是'ab`),**将扩展模式并执行反引号扩展**(如果这些扩展导致的文件名多于`-nargs`允许的话,则回显错误).在帮助中没有提到这些事情. (2认同)