【问题标题】:Formatting text with vim用 vim 格式化文本
【发布时间】:2012-11-29 21:12:50
【问题描述】:

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

      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 但并非所有重复的行都被删除。我认为这可能是因为某些地方的制表符而不是空格。有什么相关信息吗?

【问题讨论】:

    标签: vim formatting


    【解决方案1】:

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

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

    这会将所有 4 位数字(在本例中为 3100)排列成这样:

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

    【讨论】:

    【解决方案2】:

    如果维护顺序不重要,可以使用

    :%sort u
    

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


    如果您需要维护订单,我的SearchPosition plugin 可能会派上用场。通过它的 Alt + M 映射,它显示了当前单词在缓冲区中的出现次数。您可以遍历每一行以检查重复项。


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-11
      • 2010-11-24
      • 1970-01-01
      • 2019-04-10
      • 2012-07-24
      • 1970-01-01
      • 2018-07-23
      • 2020-05-29
      相关资源
      最近更新 更多