代码之家  ›  专栏  ›  技术社区  ›  Tryer

在头文件中按升序对类成员函数和变量进行排序

  •  0
  • Tryer  · 技术社区  · 5 年前

    给出一个类声明:

    class foo_{
    public:
        int t1();
        const std::vector<int> & ureference(); 
    private:
        std::vector<std::pair<int, int>> vecofpairs;
        string name;
    }
    

    我想把公共职能按名称的升序排列。在对线路进行适当的视觉选择后,在vim中执行以下命令:

    :'<,'>,!sort -k2

    对函数进行如下排序:

    const std::vector<int> & ureference(); 
    int t1();
    

    这个 sort 在第二列上排序,在本例中为 std::... 和 t1(); .然而,这不是我想要的。我希望排序基于 ( 在每一行上,排序顺序如下:

    int t1();
    const std::vector<int> & ureference(); 
    

    同样,我想根据前面的列名对成员变量进行排序 ; 所以排序顺序是:

    string name;
    std::vector<std::pair<int, int>> vecofpairs;
    

    有没有合适的vim捷径来实现这一点?否则,你怎么能 分类 用于在紧接之前根据字段进行排序 ( 或 ; ?

    0 回复  |  直到 5 年前
        1
  •  3
  •   filbranden    5 年前

    你可以使用Vim的内置 :sort 命令对行的任意部分进行排序。

    内置的 :排序 可以选择一个模式,然后跳过该模式或匹配该模式,以决定使用什么作为排序键。

    例如,在您的情况下,您可以使用 /.* / 作为一种模式,可以跳过所有内容,直到行的最后一个空格。(这要求在 ; .)

    要对方法进行排序:

    :3,4sort /.* /
    

    成员们:

    :6,7sort /.* /
    

    但也许这并不是你所需要的。假设你的方法有参数(它们之间有空格),假设你有一个 & 或 * 方法名称旁边( int *findmin(int *arr); 例如。)

    然后可以将方法名称与 /\k\S*(/ ,这是一个关键字字符(所以不是 * 或 & ),后跟非空白,后跟文字 ( .你通过了吗 :排序 A. r 标记以根据模式匹配进行排序(而不是跳过它),因此:

    :'<,'>sort /\k\S*(/ r
    

    最后一个是使用视觉模式选择块的方法。当您按下 : 在视觉模式下,它将自动填充 :'<,'> 在下一个命令中使用视觉选择的线条范围。

    Vim正则表达式非常灵活,所以只要您对它们感到满意,就应该能够使用这种设置。我强烈建议退房 :help :sort ,其中有一些例子,可能会读到 :help pattern.txt 整体而言。