2012-04-30 19 views
2

のオプションを組み合わせる:は、私は頻繁に使用してコマンドを実行するためにinputdialogを使用inputdialog

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

P。E.検索番号
n == 1 - > p.e. '、'ですべての数字を検索する
n == 2 - > p.e. n == 3 - > p.e.の場合、すべての指数の数値を検索します。
3桁の数字をすべて検索する

この方法では、1つの引数しか選択できません。

inputdialogで複数の引数を一緒に選択できる方法はありますか?

答えて

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 

そして、関数はそれらをリストに分割します。

+0

ありがとうBirei、コマンドラインで最初の文字を挿入すると何か変なことが起こります...カーソルが20スペース右に移動します。私はそれが何かを見つけることができません。アイデアはありますか? (Btwはmenu.vimの関数を使用しています) – Reman

+0

ヘルプファイルに見つかりました。私は ':calls inputsave()'と ':call inputrestore()'を入力行の周りに置かなければなりませんでした。 :) – Reman

+0

入力が数字だけであるかどうかをチェックします。そうでなければエラー出力を返します。それを視覚化する方法を知っていますか?エラー出力は 'my_grouped_opts'項目の長いリストでは見ることができません。 – Reman

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 

返される文字列はユーザ​​ーが入力するものであれば何でもかまいませんので、文字列が実際に整数のリストであることを確認する必要があります。