在Vim中触发操作员待定映射后获取用户输入

时间:2014-04-27 19:58:58

标签: vim

我想创建一个函数opfunc(由运算符挂起的映射调用的函数),用于在执行过程中的用户输入以获取参数。我的函数应该从文本动作中提取行范围(可以使用[]标记完成),然后将用户放到命令行以输入参数(应该是可填充的,因为它在定义命令时),然后,在接收输入时,继续执行。我还将解决这种情况,即函数的最后一行将用户放到命令行上,并且提示符前面填充了可以接管执行的命令的名称(在用户输入参数之后)。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

:help g@处启动opfunc示例,这里有一些可以帮助您入门的内容。这会将范围存储在脚本本地变量中,通过feedkeys()触发命令行,然后使用可以获取范围的自定义命令完成。

nmap <silent> <F4> :set opfunc=MyOpfunc<CR>g@
function! MyOpfunc(type, ...)
    let s:rangeStart = getpos("'[")
    let s:rangeEnd = getpos("']")
    call feedkeys(':MyCommand ', 't')
endfunction

function! MyCommand( arguments )
    echomsg "MyCommand with" a:arguments "from" string(s:rangeStart) "to" string(s:rangeEnd)
endfunction
command! -nargs=+ MyCommand call MyCommand(<q-args>)

只需添加命令完成和实际功能。我也很想知道你想到的实际用例。