2

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

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

pe search numbers
if n == 1 --> pe 用 '.,' 搜索所有数字
if n == 2 --> pe 搜索所有指数数
if n == 3 --> pe 搜索所有3位数字

但使用这种方法,我只能选择一个论点。

Vim 中有没有一种方法可以在输入对话框中同时选择多个参数?

4

2 回答 2

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

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

于 2012-04-30T16:16:31.140 回答
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

该函数会将它们拆分为一个列表。

于 2012-04-30T16:18:49.293 回答