我在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 ,我可以等到我想要的时间。
我知道广告dw
和dW
等内置地图有一个特别之处。
我的问题:有没有办法让我自己的nmap
接受按键之间的长时间延迟?
答案 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
;它使映射不受重映射和递归的影响。