vim omap ge 的奇怪行为

问题描述 投票:0回答:1

我在 vim 8.2、vim 9 和 nvim 0.10.2 中发现了

omap
的两个奇怪行为。它可能适用于所有运算符(至少是
d
y
c
,我已经测试过),但我将选择
d
作为下面的示例。

表示行尾。

案例1

缓冲区是

␊
abc␊

光标位于

b

使用

dge
,缓冲区被清除,毫不奇怪。但是,使用
d2ge
(或等效的
2dge
,或
d3ge
d4ge
等),光标移动到第一行的开头,并且不会删除任何内容(或对于运算符
c
,我们没有处于插入模式)!

案例2

缓冲区是

abc␊

光标位于

a
。使用
db
时,没有任何变化。这是因为
b
排他性。然而,对于包容性的
dge
,同样没有任何改变!

我试图在手册中查找,但没有成功。任何人都可以解释这种行为,希望参考 vim 手册吗?非常感谢!

为什么这对我有用:我正在开发一个 vim 插件,它将 vim 单词动作 扩展到没有单词边界的语言,如中文。一项重要功能是在 ASCII 文本上与 vim 兼容。因此,我需要了解 vim/nvim 中的此类行为细节。

vim neovim
1个回答
0
投票

案例1

  • dge
    根本不会“清除缓冲区”,因为该运动不包括
    c
    。您的意思是“光标位于
    c
    ”吗?
  • d2ge
    不执行任何操作,因为在您的示例中,不可能将光标移动到不存在前第二个单词的末尾。由于动作出现错误,因此无法执行操作。

案例2

这基本上是同一个问题:

b
ge
都是不可能的,所以不执行操作:

  • 如果光标已位于单词的第一个字符上,
    b
    会将光标移动到前一个单词的第一个字母。无上一个单词 → 错误 → 无动作 → 无操作。
  • ge
    将光标移动到上一个单词的最后一个字符。无上一个单词 → 错误 → 无动作 → 无操作。

换句话说,您描述的行为是预期的行为。

© www.soinside.com 2019 - 2024. All rights reserved.