在不离开输入框的情况下验证输入框的输入

时间:2013-09-25 09:33:09

标签: regex validation vim input

我创建了一个带有inputdialog的函数来有条件地移动行(tnx到Romainl) 首先要做的是搜索,然后调用下面的代码。

我的代码:

   if !exists("char")
     let char = "Move Lines with search match after/before? 
        \ \n
        \ \nMove Line Backwards: Start input with: '?' 
        \ \nMove Line Forwards: Start input with: '/' 
        \ \n
        \ \np.e.
        \ \n?=\\s*$           
        \"
   endif  
   let a = inputdialog(char)
   if a == ""
     return
   endif

   if matchstr(a, '^?') != ''
     let minplus = '-'
   elseif matchstr(a, '^/') != ''
     let minplus = '+'
   else
     echo "wrong input: input does not start with '?' or '/'"
     return
   endif

我想在“return back to inputdialog”命令中更改“return”命令:
我想在不离开输入框的情况下立即检查输入框中输入的输入,这可能吗?

1 个答案:

答案 0 :(得分:1)

inputdialog()的调用是Vimscript中的单个阻塞调用。您的代码在打开时都无法运行。没有事件(可以与:autocmd挂钩的事件被触发。通常,Vim中没有并行性。

您可以做的最好的事情是在验证失败时重新启动inputdialog()(可能使用之前输入的文本初始化)。

或者,您必须实现自己的输入控件(例如,使用getchar())。在那里,您可以在等待下一个按下的字符时运行验证。