为什么d {motion}命令与Vim中的{motion}命令不一致?

时间:2014-04-13 09:59:27

标签: vim

实验1

  1. 打开Vim,只在缓冲区中插入以下文本行。

    hello world
    

    换句话说,按 i ,键入hello world并按 Esc

  2. 0 将光标定位在第一行的第一个字符处。

  3. e 。光标移动到o
  4. 0 将光标再次定位在第一行的第一个字符处。
  5. d e 。您会看到ho中的字符已被删除。只留下以下文字。

     world
    
  6. 实验2

    1. 打开Vim,只在缓冲区中插入以下文本行。

      hello world
      

      换句话说,按 i ,键入hello world并按 Esc

    2. 0 将光标定位在第一行的第一个字符处。

    3. w 。光标移动到w
    4. 0 将光标再次定位在第一行的第一个字符处。
    5. d w 。您会看到h中的字符已被删除。只留下以下文字。

      world
      

      但是,我希望删除从hw的所有内容,并且只留下以下文字。

      orld
      
    6. 问题

      首先让我引用下面的:help d

                                                              *d*
      ["x]d{motion}           Delete text that {motion} moves over [into register
                              x].  See below for exceptions.
      

      在实验1中, e 引起的动作从h移到o,确定从ho的所有内容(包括ho)已被删除。

      在实验2中, w 引起的动作从h移到w但从hw的所有内容(包括{ {1}}和h)未被删除。为什么呢?

      d w d e d <的行为kbd> b 总结如下。

      w

      为什么三个命令的行为不一致?

4 个答案:

答案 0 :(得分:33)

de会削减光标下的所有内容,包括世界的最后一个字符,e包含性动作。

dw会切断光标下的所有内容,包括下一个单词,w独占动作。

您的问题的答案不在:help ddedw与其完全一致),而在:help e:help w({{ 1}}和e不必同样工作,因为正如文档所说,一个是包含而另一个独占)。

请务必记住,Vim中的所有内容都与可组合性有关:w不是de,而是de应用于d

答案 1 :(得分:19)

使用:h exclusive

可以找到您的问题的答案
A character motion is either inclusive or exclusive.  When inclusive, the
start and end position of the motion are included in the operation. When 
exclusive, the last character towards the end of the buffer is not
included.

您可以使用:h word-motions检查哪些动作是包含的(如 e ),哪些是独占的(如 w )。对于使用动作只是为了移动光标它并不重要,但它在 operator-pendig 模式下使用它时会发生。

请注意,这绝不是特定于Vim的,这些语义是由原始Vi定义的。

答案 2 :(得分:9)

这是因为,动作wexclusive motion,但einclusive。{/ p>

请参阅:

:h w
:h e

:h exclusive

答案 3 :(得分:0)

根据Vim文档,您可以在操作员切换字符动作的独占性质后使用import pandas as pd import numpy as np stops_data = pd.DataFrame({'hh_id': [20044,20044,20044,20044,20044,20044,20044,20044,20044,20044,20044,20122,20122,20122,20122,20122,20122,20122,20122,20122,20122,20122,20122,20122,],'tour_id':[16300,16300,16100,16100,16100,16100,16200,16200,16200,16000,16000,38100,38100,37900,37900,37900,38000,38000,38000,38000,38000,38000,37800,37800],'arrivaltime':[360,960,900,900,900,960,1080,1140,1140,420,840,300,960,780,720,960,1080,1080,1080,1080,1140,1140,480,900],'tour_duration':[600,600,60,60,60,60,60,60,60,420,420,660,660,240,240,240,60,60,60,60,60,60,420,420],'comp_expr':[1350,1350,268,268,268,268,406,406,406,974,974,1568,1568,606,606,606,298,298,298,298,298,298,840,840]}) stops_data['flag'] = np.where(stops_data.groupby(['hh_id']) ['tour_duration'].transform(max) < stops_data['comp_expr'],0,1)

  

如果动作已经按照角色进行,请切换     包含/排除。这可以用来做一个独家     包含运动和包含运动在内。

以上面的v文本为例(hello world表示光标位置):

|

|hello world 会将vw的运动变为包容性,因此在w之后,文本变为:

dvw

orld 会将ve的运动变成排他的,因此在e之后,文本变为:

dve