如何按 Vim 中每个块中的第一行对多个文本块进行排序?

Hub*_*bro 11 vim

我有多个文本块,或者换句话说,有多个像这样的函数:

def ==(other)
  ...
end

def to_s(full=false)
  ...
end

def to_a
  ...
end

def to_hash
  ...
end

def inspect
  ...
end
Run Code Online (Sandbox Code Playgroud)

我想按函数签名的字母顺序对函数进行排序。在 Vim 中如何最容易地做到这一点?

rom*_*inl 13

它相对简单(而且,我相信,接近 Jason 的想法):

  1. 通过用一些花哨的字符替换所有换行符,将所有函数变成一个衬垫:

    :g/def/,/end/s/\n/§
    
    Run Code Online (Sandbox Code Playgroud)
  2. 对那些衬垫进行排序:

    :%sort
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将您的所有功能扩展回其初始状态:

    :g/def/s/§/\r
    
    Run Code Online (Sandbox Code Playgroud)


Jas*_*son 2

我能想到的最好的方法是,在不编写解析定义的函数的情况下执行此操作,将前面没有的行分隔符替换为end另一个唯一分隔符(+EOL+?),然后:sort, 并重新替换行分隔符。它可能会被记录到宏中。

如果您想使用视觉选择,函数可能会更好。