使用vim格式化文本

时间:2012-11-29 21:12:50

标签: vim formatting

我有一行包含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但不是所有重复行都被删除。我认为这可能是因为某些地方的标签而不是空格。关于那个的任何信息?

2 个答案:

答案 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。