我有一行包含275行代码。这些行是c中的常量声明。 e.g
71 #define LM_HOST_ALLOWED 3100 //Boolean.
我的问题是它有很多重复的行,因为我通过复制和粘贴其他文件来创建该文件并且行不一样100%
e.g
71 #define LM_HOST_ALLOWED 3100 //Boolean.
72 #define LM_HOST_ALLOWED 3100 //Boolean.
在vim中是否有办法找到这些行并且只保留其中一行。或者有没有办法格式化所有行以使数字(在我们的例子中是3100)因子在某个水平?例如6个标签或什么?我开始手动操作,但进入和退出编辑模式很痛苦。 PLS帮助!如果这个问题没有意义,请帮我改进。
修改 我找到了关于格式化文本的解决方案: 在vim的正常模式下,我输入:
qa0f f 50i <esc>38|dwjq274@a
它完成了这项工作。我很高兴我找到了这个(在这个论坛上也是如此)
现在的问题是uniq
命令没有做我正在阅读它应该做的事情。在vim我键入:!uniq但不是所有重复行都被删除。我认为这可能是因为某些地方的标签而不是空格。关于那个的任何信息?
答案 0 :(得分:1)
您可以使用tabular.vim排列数字,使用以下内容:
:Tabularize / [0-9]\{4\}/l2c1
这将以4位数字排列所有数字(在这种情况下为3100
):
71 #define LM_HOST_ALLOWED 3100 //Boolean.
72 #define LM_HOST_ALLOWED 3100 //Boolean.
答案 1 :(得分:0)
如果维护订单并不重要,可以使用
:%sort u
对内容进行排序并仅保留每一行的一个实例。 (假设您首先使用 Align 或 Tabularize 规范化行格式。)
如果您需要维护订单,我的SearchPosition plugin可能会很方便。使用 Alt + M 映射,它显示缓冲区中当前字的出现次数。您可以浏览每一行以检查重复项。
如果您经常这样做(并且无法解决问题的根本原因,即重复项的输入),您可以编写一个自定义命令,用getline()
和{{1}解析所有行然后跳转到它找到的第一个重复行;它可能只是几行Vimscript。