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

Posted

技术标签:

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

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

所以,如果我有:

one two three
four five
six

我想留下来:

one
four
six

有什么想法吗?

【问题讨论】:

【参考方案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 的默认字段分隔符是空格,但您可以根据需要将其更改为您想要的任何内容。

【讨论】:

以上是关于删除 VIM 中除第一列之外的所有内容的主要内容,如果未能解决你的问题,请参考以下文章

Jquery 删除一个下拉菜单中除第一个option之外的所有option

如何删除数组索引中除第0条以外的所有记录?

如何删除目录中除文件和目录列表之外的所有内容?

PHP 删除字符串中除数字之外的所有内容

jquery中删除指定ul中除第一个li外的所有li的代码?

如何清除霓虹灯中除第一个非零车道之外的所有车道?