vim - 忽略某些键映射宏的timoutlen

时间:2013-12-06 13:31:38

标签: vim

我在Vim中做了两个简单的nmap,按 Alt - z Alt <左右移动光标10次/ KBD> - ž

nmap <ESC>z 10l
nmap <ESC>Z 10h

它完美无缺。

现在我想添加两个删除10次的类似nmap

nmap d<ESC>z 10x
nmap d<ESC>Z 10X

这个工作得很好,并遵循操作的vim逻辑,然后是光标移动。

不幸的是,如果我在 Alt z Alt Z 它会超时> d 。 我发现这很奇怪,因为我没有将任何内容映射到 d 。如果我在 d 之后按 w W ,我可以等到我想要的时间。

我知道广告dwdW等内置地图有一个特别之处。

我的问题:有没有办法让我自己的nmap接受按键之间的长时间延迟?

1 个答案:

答案 0 :(得分:1)

您是对的,默认情况下,'timeoutlen'(默认为1秒)适用于映射键。我觉得这很有用,但是如果你真的希望你的已启动映射无限期地等待,你必须在第一个键上定义地图,然后自己查询和处理其余的键

function! MapOrDefault()
    let c = nr2char(getchar())
    return c == "\<A-z>" ? '10x' : 'd' . c
endfunction
nnoremap <expr> d MapOrDefault()

注意:虽然它在技术上是等效的,但我建议您更喜欢使用Vim键符号(<A-z>)而不是隐藏的<Esc>z

注意:You should use :noremap;它使映射不受重映射和递归的影响。