我创建了一个带有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”命令:
我想在不离开输入框的情况下立即检查输入框中输入的输入,这可能吗?
答案 0 :(得分:1)
对inputdialog()
的调用是Vimscript中的单个阻塞调用。您的代码在打开时都无法运行。没有事件(可以与:autocmd
挂钩的事件被触发。通常,Vim中没有并行性。
您可以做的最好的事情是在验证失败时重新启动inputdialog()
(可能使用之前输入的文本初始化)。
或者,您必须实现自己的输入控件(例如,使用getchar()
)。在那里,您可以在等待下一个按下的字符时运行验证。