是否有可能在执行vimscript函数时执行类似`:normal:`的输入命令行?

时间:2014-09-02 05:36:52

标签: vim

我正在写一个vim脚本函数。在执行期间,我想进入命令行以提供一些无法提前确定的参数,用于某些特定命令。我想要像

这样的东西
:startinsert

但应该像

:startcmd

有可能吗?还是其他一些方法?

2 个答案:

答案 0 :(得分:1)

有一种方法,我们可以使用以下代码来模仿命令行。

exec input(prompt, text, completion)

textcompletion是可选的,:h input()表示更多

但有一点需要注意:

:h command-completion参数指示的vim内置完成(completion更多),当您点击<tab>中的input()时,光标前面的整行前一行完成。这可能不是你想要的,例如,我只想完成最后一个单词而不是整个前一行。

要解决此问题,您必须编写自己的完成功能,请参阅:h command-completion-custom:h command-completion-customlist

答案 1 :(得分:1)

input()就是你想要的。

以下是一个例子:

let myFile = input("Choose a file: ", "", "file")
execute 'edit ' . myFile

另一个:

buffer `=input("Choose a buffer: ", "", "buffer")`

请参阅:help input()


您还可以允许用户使用inputlist()从预定义的一组选项中进行选择。