结合inputdialog中的选项

时间:2012-04-30 15:37:25

标签: vim input dialog options

我经常使用inputdialog来执行命令:

  let n = confirm({msg} [, {choices} [, {default} [, {type}]]])

体育专业。搜索号码 如果n == 1 - >体育使用'。,'来搜索所有数字 如果n == 2 - >体育搜索所有指数数字
如果n == 3 - >体育搜索3位数的所有数字 等

但是使用这种方法我只能选择一个参数。

在Vim中有没有办法在inputdialog中一起选择多个参数?

2 个答案:

答案 0 :(得分:3)

您可以使用input()提示用户输入字符串,然后检查返回的列表:

let string = input( {msg}, {choices}, ... )

例如,用户可以输入1,2,3,您可以对此字符串进行文本比较:

if ( string =~ 1 )
    " do something
endif

if ( string =~ 2 )
    " do something
endif

if ( string =~ 3 )
    " do something
endif

更复杂的方法(例如,如果有超过9个选项)可能是将字符串拆分为列表:

let choice_list = split( string, ',' )

for choice in choice_list
    if choice == 1
        " do something
    endif
    if choice == 2
        " do something
    endif
    if choice == 3
        " do something
    endif
endfor

由于返回的字符串可能是用户决定输入的任何内容,因此您可能希望添加一些完整性检查,表明字符串确实是整数列表。

答案 1 :(得分:2)

一种解决方法,使用input()功能,让用户选择多个选项并将其拆分为一个列表来处理它们。一个例子:

将下一个功能添加到vimrc或类似文件中:

func My_search()
    let my_grouped_opts = input ( "1.- Search one\n2.- Search two\n3.- Search three\n" )
    let my_list_opts = split( my_grouped_opts, '.\zs' )
    for opt in my_list_opts
        echo "Option number " opt " selected"
    endfor
endfunction

称之为:

:call My_search()

会出现您的选择:

1.- Search one
2.- Search two
3.- Search three

选择它们:

23

该功能会将它们分成一个列表。