2

打开新窗口(包含项目)后如何获取用户输入(以便我可以过滤某些项目)?我想要类似于CtrlPCtrlSpace的东西。我试图查看他们的代码,但无法确定他们在哪里执行此操作。

我调用它的方式是创建一个command调用foo打开窗口并等待用户输入的函数的函数。

我已经尝试了一些变体(里面的代码foo):

botright split NewWindow
let input = input('>> ')

botright split NewWindow
redraw!
let input = input('>> ')

第一个总是在打开新窗口之前让我输入。在他们两个中,该>>部分都没有出现(输入本身也没有)。他们怎么做到的?有一堆getchar电话?

(使用 Neovim v0.2.0)

4

1 回答 1

1

行。看起来这并不难(由于某种原因,我迷失在源代码中并且看不到它)。他们基本上一次只得到一个字符并不断重复结果。

据我所知,CtrlP使用以下方法:

  • 重绘
  • 要求字符getchar()
  • 将字符与累加器字符串连接起来
  • 回显字符串
  • 在你想要的时候循环

我的 vimscript 现在看起来像这样:

let str = ''
while s:some_stop_condition()
    redraw
    let c = getchar()
    let str = str . nr2char(c)
    echo str
endwhile
于 2017-10-20T01:33:15.257 回答