我通常输入命令db在Vim中向后移除一个单词.在没有空格的行的末尾执行此操作会留下该单词的最后一个字符,因为光标开始从第二个最后一个字符中删除.
我可以按b其次de代替,但我觉得这混乱的,有时连续做很多时候它,导致unneccesary错误.我希望有一种方法可以到达终点并向后移除最后一个单词.
有没有办法做到这一点?
你应该训练自己停止使用db并学习爱文本对象.即使您不在一行的末尾,也会出现此问题.
foo bar baz
^
Run Code Online (Sandbox Code Playgroud)
然后db会给
foo r bax
^
Run Code Online (Sandbox Code Playgroud)
而不是使用db或de甚dw至训练自己使用diw和daw.这可能需要一些人习惯,但在路上它将变得自然并且使用起来更方便.一旦文本对象变得自然,您就可以开始使用其他命令('c'或'y'等)甚至其他文本对象.(我甚至无法计算我使用了多少次dap或者ci()
有关这些内容的简短说明,请考虑diwas (d)elete (i)nside this (w)ord和dawas (d)elete (a)round this (w)ord或(d)elete (a) (w)ord.有关更具体的示例:
foo bar baz
^
Run Code Online (Sandbox Code Playgroud)
打字diw给
foo bar
^
(note the leading space)
Run Code Online (Sandbox Code Playgroud)
但
foo bar baz
^
Run Code Online (Sandbox Code Playgroud)
打字daw给
foo bar
^
Run Code Online (Sandbox Code Playgroud)
只要你的光标在同一个单词上,这些仍然可以做同样的事情.因此,如果我们将光标移回"a"或"b",您将获得完全相同的结果.本博客更深入地介绍了文本对象.