为什么 vnoremap a A 需要几秒钟才能完成?

why vnoremap a A takes seconds to complete?

我的配置文件中有这个:

nnoremap a a
vnoremap a A

在可视模式下按 a 需要 2 秒才能完成该操作

为什么会这样?这是一种不好的做法吗?

这个问题是由于您有一些 else 映射(在可视模式或所有模式下)以 'a'.

假设我在我的 .vimrc(或如您所说的配置文件)中映射了 2 个不同的命令

vnoremap a A
vnoremap ab D

在这里,当我在可视模式下按 'a' 时,我希望它附加文本。 当我按 'ab' 时,我希望它为我删除一行。

我现在把手伸到键盘上并按下 'ab'。 vim 如何知道我想删除一行而不只是将字母 'b' 添加到文本中?两者都需要相同的按键。

所以为了区分,当我按下 'a' 键时,vim 等一下看我选择哪个命令,如果我按下'b' 很快就会意识到这实际上是指令 'ab' 表示 'D' 表示删除。

如果我按 'a' 并稍等片刻,vim 将接受我正在发出指令 'a',这意味着 'A' 意味着追加。然后我点击 'b',字母 'b' 被附加到文本中。

如果你想让它停止,你将不得不检查你的 .vimrc 并将你的映射更改为尽可能不重叠(以相同的字母开头),或者你可以键入 :h leader 在 vim 中了解 mapleaders,这将使您更容易规划映射。我个人将 mapleader 设置为 space,但许多人也喜欢使用逗号或他们选择的其他键。

tldr: Vim 正在等待一秒钟,看看您是否要按另一个键并发出不同的命令