【问题标题】:Why does "d1j" delete two lines in vim?为什么“d1j”会删除vim中的两行?
【发布时间】:2011-04-29 13:13:55
【问题描述】:

d{motion} 命令似乎无法正常工作:

d1j  " deletes 2 lines to the bottom
d1l  " deletes 1 character to the right

这是预期的行为吗?

【问题讨论】:

  • 这确实是关于 vim 工作原理的一个很好的问题。
  • 既然你提到了,是的,它不一致。如果您在 7.3+ 中启用相对编号(我强烈推荐),您可以看到当前行为 0,并且它之后/之前的行以 1 开头。

标签: vim command


【解决方案1】:

当您开始一个动作并且您处于操作员挂起模式时,您的动作将是包含或排他的,并且是字符方向或线方向的(线方向的动作总是包含的)。

j 是线性包含运动。可能您想尝试dvjdgj(后者适用于屏幕线)。

:help operator。您可以分别使用 V、v 或 CTRL-V 将动作强制为逐行、逐字符或逐块。

【讨论】:

  • 不认识那个!很棒的提示:)
【解决方案2】:

实际上并不不一致。我猜你在找

  • 删除一行:dd(这是一个命令
  • 删除一行downd1j(或短d j)。这是一个有动作的运算符)

其余令人惊讶的部分是由于 vim 的 linewise、blockwise 和 characterwise 运动的概念,它们实际上只是允许 Vim 做正确的事情做你期望的事情的抽象。 strong> 对选择进行操作时。


就像@Benoit 说的,d 是采取行动的操作员。

2j 是逐行的,它会移动两行,覆盖三行。

请注意,如果您想要一些视觉线索,可以设置rn 选项

:se relativenumber

这将导致相对行号显示在编辑器的左侧“装订线”中。这些数字可以用作“地址”,并在您执行“d12j”或“d12k”时执行您所期望的操作

顺便说一下,我建议在习惯这个之前先熟悉text object 的动作。很多时候,文本对象更加精确(并且通常在字符模式下工作,仅在适当的条件下降级为逐行选择)

【讨论】:

    猜你喜欢
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多