【问题标题】:why vnoremap a A takes seconds to complete?为什么 vnoremap a A 需要几秒钟才能完成?
【发布时间】:2018-07-17 03:08:13
【问题描述】:

我的配置文件中有这个:

nnoremap a a
vnoremap a A

在可视模式下按 a 需要 2 秒来执行操作

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

【问题讨论】:

  • 你还有其他以a开头的映射。

标签: vim editor neovim


【解决方案1】:

这个问题是由以下事实引起的:您有以“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> 仍然无法覆盖原始映射,这是怎么回事?
  • @wengwengweng 好吧,当你输入 :map 时,它告诉你 a% 映射到什么?你试过 vnoremap a% 吗? :map 的那一行是什么意思?
  • vnoremap a% <nop> 在 vi​​m 中运行良好,但它仍在等待,所以 unmap a% 效果更好。但是如果我将其中一个放在我的.vimrc 中,它们将不会运行(地图还不存在),那么在.vimrc 之后加载的插件添加的映射也是如此吗?
  • 我设法通过在after 文件夹中创建脚本来做到这一点,谢谢
  • @wengwengweng 它可能来自插件,因为插件是在 vimrc 之后运行的。我强烈建议您设置您的地图领袖。然后,您只需将 mapleader 放在您自己编写的任何命令的前面。例如,我的 mapleader 是空格,所以我的映射打开或关闭折叠,我按 f。这样我就不会妨碍 f 映射到的任何内容,即使我不知道 f 映射到什么。试试吧,vim 的一个特点是,当你按照预期的方式使用它而不是第一种工作方式时,感觉会好得多。
猜你喜欢
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多