如何为vim创建“新模式”(即循环并获取用户输入,然后执行相关的操作)

Eda*_*aor 5 vim editor

我正在尝试在vim中创建一种“新模式”。模式的细节并不重要,但是我需要做一件事。

我需要执行以下伪代码:

get user input (movement keys like "j" or complex keys like "dd")
while user_input != <esc>
   execute the user input
endwhile
Run Code Online (Sandbox Code Playgroud)

换句话说,我需要一个循环,该循环将读取用户的操作,然后执行相关的操作。

我已经有以下代码:

let char = nr2char(getchar())
while char =~ '^\w$'
    execute "normal ". char
    let char = nr2char(getchar())
endwhile
Run Code Online (Sandbox Code Playgroud)

这对于用户移动(jk等)工作正常,但对于更复杂的多字符命令(如)无效dd

另外,这是一个小麻烦,但是光标在getchar()期间消失了,这意味着您实际上看不到光标(由于我想做的事情,它的重要性不那么重要,但希望也能找到解决方案) 。

有谁知道我如何使多字符动作起作用?

Luc*_*tte 1

我通常会在本地(:h map-<buffer>例如)重新定义这个新模式要改变的东西。我还重写<esc>从模式中取消注册这些内容。

在我看来,这是更简单的方法。