Ich habe mehrere Textblöcke oder mit anderen Worten mehrere Funktionen wie diese:
def ==(other)
...
end
def to_s(full=false)
...
end
def to_a
...
end
def to_hash
...
end
def inspect
...
end
Ich möchte die Funktionen alphabetisch nach der Funktionssignatur sortieren. Wie geht das in Vim am einfachsten?
def ...
. Ich bin unter Linux, daher funktioniert jedes dieser Dienstprogramme für mich.Antworten:
Es ist relativ einfach (und, glaube ich, nahe an dem, was Jason vorhatte):
Verwandeln Sie alle Ihre Funktionen in einen Liner, indem Sie alle Zeilenumbrüche durch einen ausgefallenen Charakter ersetzen:
Sortieren Sie diese Einzeiler mit:
Erweitern Sie alle Ihre Funktionen wieder auf ihren ursprünglichen individuellen Zustand:
quelle
:g/./,/^$/-s/\n/§/g
und dann:%sort
und danns/§/\r/g
Ich habe das AdvancedSorters-Plugin geschrieben , um die drei in @ romainls Antwort angegebenen Schritte in einem einzigen Befehl zu vereinfachen:
Das Muster hier ist etwas komplexer, um auch die trennenden Leerzeilen richtig einzuschließen.
quelle
Der beste Weg, dies zu tun, ohne eine Funktion zu schreiben, die die Definitionen analysiert, besteht darin, die nicht vorangestellten Zeilenbegrenzer durch ein
end
anderes eindeutiges Trennzeichen (+ EOL +?) Zu:sort
ersetzen und dann die Zeilenbegrenzer erneut zu ersetzen. Es könnte wahrscheinlich in einem Makro aufgezeichnet werden.Eine Funktion ist jedoch möglicherweise besser, wenn Sie die visuelle Auswahl verwenden möchten.
quelle
Probieren Sie das Vissort-Plugin aus. Es unterstützt eine Block-Sortierfunktion:
Wenn Argumente fehlen, werden Sie von BlockSort () danach gefragt. Die Nextblock- / Endblock-Muster begrenzen einen Block. Das Findtag-Muster wird verwendet, um eine Zeile zu finden, die ein "Tag" enthält, das zum Sortieren verwendet wird. Tagpat und Tabsub werden als Ersatz verwendet, um das Sortier-Tag aus der Tag-haltigen Zeile zu extrahieren.
Sie können vissort.vim von http://www.drchip.org/astronaut/vim/index.html#VISSORT erhalten
quelle