0

我创建了一个带有输入对话框的函数来有条件地移动行(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”命令:
我想在不离开输入框的情况下立即检查输入框中输入的内容,可以吗?

4

1 回答 1

1

调用inputdialog()是 Vimscript 中的单个阻塞调用。您的任何代码都无法在打开时运行。不会触发任何事件(可以与 with 挂钩的事件:autocmd。一般而言,Vim 中没有并行性。

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

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

于 2013-09-25T10:20:44.173 回答