删除VIM中第一列以外的所有内容

时间:2012-12-15 10:26:58

标签: vim editing

我有一个文本文件,我想删除除每行第一个单词之外的每个单词,我不知道如何做到这一点。

所以,如果我有:

one two three
four five
six

我想留下来:

one
four
six

有什么想法吗?

3 个答案:

答案 0 :(得分:18)

如果这些行没有以空格开头,你可以用空字符串替换' .*'(它匹配第一个单词之后的所有内容):

:%s/ .*//g

答案 1 :(得分:7)

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

说你有这个内容:

one two three

  four five
            six

运行:%!awk '{print $1}',您将获得:

one

four
six

awk默认字段分隔符是一个空格,但您可以根据需要将其更改为您想要的任何内容。

答案 2 :(得分:2)

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

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

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

编辑:请注意,当一行严格少于2个字符时,它不起作用。因此,这通常不是解决此问题的最佳方法。