1

我有一个包含 275 行代码的文件。这些行是 ceg 中的常量声明

      71 #define LM_HOST_ALLOWED             3100 //Boolean.

我的问题是它有很多重复的行,因为我通过从其他文件复制和粘贴创建了该文件,并且这些行不是 100%

例如

      71 #define LM_HOST_ALLOWED             3100 //Boolean.
      72 #define LM_HOST_ALLOWED               3100 //Boolean.

vim 中有没有办法找到这些行并只保留其中一个。或者有没有办法格式化所有行以使数字(在我们的例子中为 3100)因子处于某个水平?例如6个标签或什么?我开始手动操作,但进入和离开编辑模式很痛苦。请帮忙!如果这个问题没有意义,请帮助我改进它。

编辑: 我找到了一个关于格式化文本的解决方案:在 vim 的正常模式下我输入:

qa0f f 50i <esc>38|dwjq274@a 它完成了这项工作。我真的很高兴我发现了这个(也在这个论坛中),现在的问题是该uniq命令没有做我正在阅读它应该做的事情。在 vim 中我输入 :!uniq 但并非所有重复的行都被删除。我认为这可能是因为某些地方的制表符而不是空格。有什么相关信息吗?

4

2 回答 2

1

您可以使用tabular.vim来排列数字,使用如下内容:

:Tabularize / [0-9]\{4\}/l2c1

这将以这种方式将所有数字与 4 位数字(3100在本例中)对齐:

71 #define LM_HOST_ALLOWED  3100 //Boolean.
72 #define LM_HOST_ALLOWED  3100 //Boolean.
于 2012-11-29T22:38:05.763 回答
0

如果保持顺序不重要,可以使用

:%sort u

对内容进行排序并仅保留每行的一个实例。(假设您首先使用AlignTabularize规范了行格式。)


如果您需要维护订单,我的SearchPosition 插件可能会很方便。通过其Alt+M映射,它显示缓冲区中当前单词的出现次数。您可以遍历每一行以检查重复项。


如果您经常这样做(并且无法解决问题的根本原因,即重复项的条目),您可以编写一个自定义命令,用getline()and解析所有行split(),然后跳转到它找到的第一个重复行;它可能只是几行 Vimscript。

于 2012-11-30T08:11:45.167 回答