【问题标题】:Remove everything but the first column in VIM删除 VIM 中除第一列之外的所有内容
【发布时间】:2012-12-03 04:53:45
【问题描述】:

我有一个文本文件,我想删除除每行的第一个单词之外的所有单词,但我不知道该怎么做。

所以,如果我有:

one two three
four five
six

我想留下来:

one
four
six

有什么想法吗?

【问题讨论】:

    标签: vim editing


    【解决方案1】:

    如果行不以空格开头,您可以将' .*'(匹配第一个单词之后的所有内容)替换为空字符串:

    :%s/ .*//g
    

    【讨论】:

      【解决方案2】:

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

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

      通过这种方式,您可以重复任何您想要的复杂操作,而不仅仅是替换。 我喜欢宏:)

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

      【讨论】:

        【解决方案3】:

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

        假设你有这个内容:

        one two three
        
          four five
                    six
        

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

        one
        
        four
        six
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-12-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多