Saya memiliki beberapa blok teks, atau dengan kata lain, beberapa fungsi seperti ini:
def ==(other)
...
end
def to_s(full=false)
...
end
def to_a
...
end
def to_hash
...
end
def inspect
...
end
Saya ingin mengurutkan fungsi berdasarkan abjad dengan tanda tangan fungsi. Bagaimana ini bisa paling mudah dilakukan di Vim?
def ...
. Saya menggunakan Linux, jadi semua utilitas itu akan bekerja untuk saya.Jawaban:
Ini relatif sederhana (dan, saya percaya, dekat dengan apa yang ada dalam pikiran Jason):
ubah semua fungsi Anda menjadi satu liner dengan mengganti semua baris baru dengan beberapa karakter mewah:
urutkan satu kalimat dengan:
perluas semua fungsi Anda kembali ke status individual awal mereka:
sumber
:g/./,/^$/-s/\n/§/g
, dan kemudian:%sort
, dan kemudians/§/\r/g
Saya telah menulis plugin AdvancedSorters untuk menyederhanakan tiga langkah terpisah yang diberikan dalam jawaban @ romainl menjadi satu perintah:
Pola di sini sedikit lebih rumit untuk memasukkan garis kosong yang memisahkan dengan benar.
sumber
Cara terbaik yang dapat saya pikirkan untuk melakukan ini tanpa menulis fungsi yang mem-parsing definisi, adalah dengan mengganti pembatas garis yang tidak didahului oleh
end
pembatas unik lainnya (+ EOL +?), Dan kemudian:sort
, dan mengganti pembatas garis. Mungkin bisa direkam ke makro.Namun, fungsi mungkin lebih baik, jika Anda ingin menggunakan pemilihan visual.
sumber
Coba plugin vissort. Ini mendukung fasilitas penyortiran blok:
Jika ada argumen yang hilang, BlockSort () akan meminta Anda untuk mereka. Pola nextblock / endblock membatasi blok, pola findtag digunakan untuk menemukan garis yang berisi "tag" yang akan digunakan untuk menyortir; tagpat dan tabsub digunakan sebagai pengganti untuk mengekstrak tag pengurutan dari baris yang mengandung tag.
Anda dapat memperoleh vissort.vim dari http://www.drchip.org/astronaut/vim/index.html#VISSORT
sumber