为什么“d1j”在vim中删除了两行?

时间:2011-04-29 13:13:56

标签: vim command

d{motion}命令似乎不一致:

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

这是预期的行为吗?

2 个答案:

答案 0 :(得分:10)

当你开始一个动作并且你处于操作员暂挂模式时,你的动作将是包含性的或排他性的,或者是字符式或线性的(线性运动总是包含在内)。

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

请参阅:help operator。您可以分别使用V,v或CTRL-V强制移动为线性,字符或块状。

答案 1 :(得分:2)

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

  • 删除一行: d d (这是命令
  • 删除一行 down d 1 j (或短 d Ĵ)。这是具有动作的运算符

剩下的令人惊讶的部分是由于vim的线性,块状和特征性运动的概念,这实际上只是抽象让Vim 做正确的事做你期待的事情在选择时操作。


就像@Benoit所说,d是采取动议的运算符。

2j按行,它将移动两行,覆盖3行。

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

:se relativenumber

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

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