【发布时间】:2018-07-17 03:08:13
【问题描述】:
我的配置文件中有这个:
nnoremap a a
vnoremap a A
在可视模式下按 a 需要 2 秒来执行操作
为什么会这样?这是一种不好的做法吗?
【问题讨论】:
-
你还有其他以
a开头的映射。
我的配置文件中有这个:
nnoremap a a
vnoremap a A
在可视模式下按 a 需要 2 秒来执行操作
为什么会这样?这是一种不好的做法吗?
【问题讨论】:
a开头的映射。
这个问题是由以下事实引起的:您有以“a”开头的 else 映射(在可视模式或所有模式下)。
想象一下我在我的 .vimrc(或者你所说的配置文件)中映射了 2 个不同的命令
vnoremap 一个 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,这将使您更容易规划映射。我个人将我的地图向导设置为空格,但许多人也喜欢使用逗号或他们选择的其他键。
tldr:Vim 正在等待一秒钟,看看您是否要按另一个键并发出不同的命令
【讨论】:
map 的可视模式下看到一个动作用a% 映射,但是map a% <nop> 仍然无法覆盖原始映射,这是怎么回事?
vnoremap a% <nop> 在 vim 中运行良好,但它仍在等待,所以 unmap a% 效果更好。但是如果我将其中一个放在我的.vimrc 中,它们将不会运行(地图还不存在),那么在.vimrc 之后加载的插件添加的映射也是如此吗?
after 文件夹中创建脚本来做到这一点,谢谢