删除每行的第一个单词

时间:2009-10-14 18:26:00

标签: vim

如何删除Vim中每行的第一个单词?

每行上的模式怎么样?

7 个答案:

答案 0 :(得分:30)

:救援正常:

:%norm dw

它基本上重放了参数,就像你在普通('非编辑')模式下输入它们一样。

来自:help:

:norm [al] [!] {commands}

执行普通模式命令{命令}。

这使得可以执行键入的正常模式命令 命令行。 {commands}执行就像输入一样。

答案 1 :(得分:28)

在这里以真正的vi风格去追求神秘:

1Gq10dwjq100000@1

兰迪在评论中修正了这一点,以便处理超过100000行:

ggqqdwj@qq@q

对于那些以Vim开始的人,这可以分解为:

gg    - Go to first line
qq    - Record a macro into register 'q'
dwj@q - The macro:
            dw - delete word at cursor
            j  - go down one line
            @q - run the macro in register 'q'
q     - Stop recording the macro
@q    - Execute the macro in register 'q'

本质上,宏是递归的 - 它删除一个单词,向下移动一行,然后再次调用自身,重复每一行直到文件结束。最后的'@q'是在每一行上关闭宏所需的初始(手动)调用。

答案 2 :(得分:19)

我会使用以下内容:

:%s/^\w+\s+//

正则表达式将匹配从行首开始的一个或多个“单词”字符,后跟至少一个空白字符。它将删除单词和任何后续空格。如果一行只能包含一个单词 - 并且您仍希望将其删除 - 您可以使用替换来匹配空格或行尾。

:%s/^\w+(\s+|$)//

答案 3 :(得分:4)

这个怎么样?
:%!cut -s -d'' - f2 -

答案 4 :(得分:3)

第一个单词(其中单词定义为无空格)

:%s/^\s*[^ ]* //g

删除模式:

:%s/< insert pattern here >//g

答案 5 :(得分:1)

:%s,^[^ ]*,,

从行的开头匹配任何内容,但不是空格并替换为none。

答案 6 :(得分:0)

尽管这是一个古老的问题,但是如果其他人正在寻求这样做,则可以使用可视块。

  
      
  • 按ctrl + v
  •   
  • 选择所有要编辑的行
  •   
  • 现在使用箭头键选择整个单词
  •   
  • 按'x'
  •   

这将删除所有行中的第一个单词。此方法特别方便编辑日志文件