将光标移动到vim中的行尾(删除最后一个单词)

时间:2018-04-11 15:44:51

标签: vim editor

我通常输入命令db以在Vim中向后移除一个单词。在没有空格的行的末尾执行此操作会留下单词的最后一个字符,因为光标开始从第二个最后一个字符中删除。

我可以按b,然后按de,但我发现连续多次这样做会让人感到困惑,从而导致不必要的错误。我希望有一种方法可以到达终点并向后移除最后一个单词。

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:7)

你应该训练自己停止使用db并学习爱文本对象。即使您不在一行的末尾,也会出现此问题。

foo bar baz
      ^

然后 d b 会给出

foo r bax
    ^

不要使用dbde甚至dw,而是训练自己使用diwdaw。这可能需要一些人习惯,但在路上它将变得自然并且使用起来更方便。一旦文本对象变得自然,您就可以开始使用其他命令('c''y'等)甚至其他文本对象。 (我甚至无法计算我使用dapci(的次数

有关这些内容的简短说明,请将diw视为(d)elete (i)nside this (w)ord,将daw视为(d)elete (a)round this (w)ord(d)elete (a) (w)ord。有关更具体的例子:

foo bar baz
          ^

输入diw给出

foo bar 
       ^
(note the leading space)

但是

foo bar baz
          ^

输入daw给出

foo bar
      ^

只要你的光标在同一个单词上,这些仍然会做同样的事情。因此,如果我们将光标移回“' a'或者'',您将获得完全相同的结果。 This blog更深入地研究了文本对象。

答案 1 :(得分:2)

你可以:

  • 使用这样的映射:

    :nnoremap <silent> db :exe 'norm!' (col('.')==col('$')-1 ? 'daw' : 'db')<cr>
    
  • 或者,你可以:set ve=onemore进行一次 char越过行尾,然后在光标结束后(参见命令g$),只需使用db

编辑(解释)

  • :exe将其参数形成的字符串作为命令执行。 因此,如果光标位于行尾(col('.')==col('$')-1), 它会执行:

    :norm! daw
    

    否则会执行:

    :norm! db
    
  • :norm允许您在命令行中运行常规命令。例如,如果你已经在 正常模式,键入:norm db + return 将与仅键入db相同。 它在内部命令中非常有用。 !阻止在:norm命令中使用映射 请参阅:h :norm

  • <silent>使映射无声:没有它你会看到 :exe 'norm!' (col('.')==col('$')-1 ? 'daw' : 'db')位于底部 屏幕。
    请参阅:h <silent>

  • <cr>是返回键的关键代码。您可以将这种代码放在映射中。 在这种情况下,<cr>将验证刚刚在映射中输入的命令 有关详细信息,请参阅:h keycodes

答案 2 :(得分:0)

怎么样?
   void Start(){

        Computer computer = new Computer ();

        computer = new Disk (computer);
        computer = new Monitor (computer);

        print("You have a " + computer.Description () + ".");
    }

$ - 带你到线的最后一个字符
d - 如你所知,是删除
我 - 暗示从里面。阅读有关其他强大文本对象$diw 的更多信息 w - word

如果您未使用:help text-objects习惯,请开始使用。你会爱上它