Vim:解决特定缓冲区中键映射的歧义,以避免超时

Dmi*_*ank 9 vim map

我使用插件" 自助 ",并有"本地到缓冲区映射" d"来删除光标下的缓冲区.

我也使用plugun Surround,并且有全局映射" ds"表示" 删除环绕声 ".

所以,当我d在自助餐窗口按" "时,Vim会在执行映射之前等待一秒钟d." 我知道&timeoutlen,但我不想改变它.因此,我想d在Buffet的窗口中解决" " 关键映射的模糊性,以避免超时以d获得缓冲区.

要解决这个问题,我想在Buffet窗口中取消所有以" d" 开头的映射,但除了Buffet自己的映射之外.我怎样才能做到这一点?

PS我已阅读maparg()mapcheck(),但他们似乎没有什么,我需要,很遗憾.

Dmi*_*ank 4

看来我自己找到了解决方案:

au BufEnter buflisttempbuffer* nunmap ds
au BufLeave buflisttempbuffer* nmap   ds <Plug>Dsurround
Run Code Online (Sandbox Code Playgroud)

我希望有更通用的方法(删除真正从“ d”开始的所有映射),但此时我未能找到它。

即使我找到了如何获取所有这些映射,不幸的是我也做不到unmap <buffer> ds,因为ds这是一个全局映射。不过,我确信我应该能够禁用某些缓冲区的全局映射。Vim 很棒,但并不完美。

嗯,现在对我有用。