2012-12-15 123 views
13

我有一个文本文件,我想删除每行中除第一个单词外的所有单词,但我不知道如何执行此操作。删除除VIM中第一列以外的所有内容

所以,如果我有:

one two three 
four five 
six 

我想留在:

one 
four 
six 

有什么想法?

回答

13

如果行不空格开始,你可以用一个空字符串替换' .*'(相匹配的第一个字之后的所有内容):

:%s/ .*//g 
+1

谢谢。有用。 :) – Casteurr

2

或者,您可以使用宏做到这一点。 在正常模式下键入qa开始在寄存器a中记录一个宏。 然后键入0elDj删除当前行上的所有内容,但删除第一个单词,然后转到下一行。 再次键入q以结束录制宏。

现在你可以用@a在任何行上触发宏。 运行:%norm! @a将宏应用于缓冲区中的每一行。

这样你就可以重复任何你想要的复杂操作,而不仅仅是替换。 我爱宏:)

编辑:请注意,它不工作时,行有严格少于2个字符。出于这个原因,这通常不是解决这个问题的最好方法。

6

更强大的解决方案是通过一个非常擅长这些操作的程序对它进行过滤:awk

说你有这样的内容:

one two three 

    four five 
      six 

运行:%!awk '{print $1}',你会得到:

one 

four 
six 

awk的默认字段分隔符是空格,但你可以改变它,无论你取决于你需要什么。

+0

绝对是正确的工具。为我工作得很好。 – yantaq

相关问题