【问题标题】:Why vim's d operator is misbehaving?为什么 vim 的 d 运算符行为不端?
【发布时间】:2012-11-25 19:17:04
【问题描述】:

几天前,我决定使用 Vim 文本编辑器... 玩弄 vimtutor 我发现 d 运算符非常罕见; Vim 会话:

案例一

之前: 快速红色 Fox 跳过懒惰的棕色狗
之后:    快速红色 F 跳过懒惰的棕色狗

结果:符合预期。

案例 2

将光标放在单词的最后一个字符上。

之前: Quick Red Fox 跳过懒惰的棕狗
之后:    The Quick Red Fo Over the Lazy Brown Dog

结果:de 删除了“x Jumps”子串。

案例 3

将光标放在最后一个单词的最后一个字符上。

之前: 快速红狐跳过懒惰的棕色 Dog
之后:    快速红狐跳过懒惰的棕色 Do

结果:符合预期。


请注意:

  • 在这两种情况下,我都使用de 命令。
  • after:反映应用de命令后的变化。
  • 突出显示的部分代表编辑器中的光标位置。

问题:

  1. 这是一个错误吗?
  2. 我做错了吗?
  3. 发生了什么?

Vim 版本:7.3.50 版;由 Gentoo-7.3.50 修改

【问题讨论】:

  • e 移动到单词的下一个结尾。如果你已经在一个单词的结尾,那意味着下一个单词的结尾。所以这是预期的行为。
  • 将光标放在x 上并输入e。它将移动到jumps的末尾
  • 如果要删除到光标下当前单词的末尾,使用dw
  • 如果您已经在一个单词的末尾,您可以使用x 删除该单个字符。
  • 所以如果我在一个单词的末尾,e 会将我带到下一个单词的末尾,对吗?但是,如果我在最后一个词的末尾怎么办? ...它按预期工作! ... :S 这不是一致的行为...

标签: linux vim


【解决方案1】:

当您已经在词尾时,de 将删除到下一个词的末尾。
d 是一个运算符 命令。它接受 motion 命令(e 或其他)。
当你在词尾按 e 时,你可以看到行为是一致的。

【讨论】:

    【解决方案2】:

    当按下 e 时,vim 会将你带到 单词的末尾。如果光标在 fox 中的 x 上,那么您已经在那儿,所以 e 会移动到单词的 下一个 结尾。

    因此,de 也会删除jumps

    【讨论】:

    • @Kira 我不确定情况 3。当您执行 dl 时也会发生同样的情况,即使您不能再使用 l 来向右移动。显然 vim 有一些“超越”的想法,并尽可能多地删除以保持与如果有 另一个词会做的事情保持一致。
    【解决方案3】:

    请记住,de 是 d 删除的 2 个命令。 e 是单词的结尾。

    在一个单词的末尾发出e 会跳转到下一个单词的末尾。所以 de 从当前位置删除到下一个单词的结尾。你可能想试试dwdaw

    另见:help e:help d

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      相关资源
      最近更新 更多