Sortieren Sie alle paar Zeilen

7

Ich möchte Folgendes anhand ihrer Schlüssel sortieren

case IndexError:
    PyErr_SetString(PyExc_IndexError, exc.str.c_str());
    break;
case ValueError:
    PyErr_SetString(PyExc_ValueError, exc.str.c_str());
    break;
case RuntimeError:
    PyErr_SetString(PyExc_RuntimeError, exc.str.c_str());
    break;
case IOError:
    PyErr_SetString(PyExc_IOError, exc.str.c_str());
    break;

so wird es

case IOError:
    PyErr_SetString(PyExc_IOError, exc.str.c_str());
    break;
case IndexError:
    PyErr_SetString(PyExc_IndexError, exc.str.c_str());
    break;
case RuntimeError:
    PyErr_SetString(PyExc_RuntimeError, exc.str.c_str());
    break;
case ValueError:
    PyErr_SetString(PyExc_ValueError, exc.str.c_str());
    break;

Im Wesentlichen sortiere ich nur die Zeilen

case IOError:
case IndexError:
case RuntimeError:
case ValueError:

Der Inhalt der anderen Zeilen (diejenigen, die nicht mit a beginnen case) spielt keine Rolle, aber ich möchte, dass sie nach den Fällen sortiert werden.

Henricus V.
quelle
1
Eine Nebenlösung könnte sein, dass caseSie das Ganze regenerieren können , da der Inhalt des s ähnlich ist. Holen Sie sich das sortierte *Errors (von einem enum? Vielleicht durchlaufen sort(1)?), Und erstellen Sie dann ein Makro, das XErrorin case XError: PyErr_SetString(PyExc_XError, exc.str.c_str()); break;alle Enum-Werte konvertiert und ausgeführt wird.
Shahbaz
Ich habe das nicht selbst benutzt, aber vis.vim behauptet , es zu tun. (Lesen Sie Abschnitt 4 unter dem Link.) Sie können vis.vim hier
Dan J.

Antworten:

7

Der einfache Weg: Verbinden Sie die Zeilen in den logischen Blöcken, bevor Sie sortieren.

Im Detail:

  • Markieren Sie die Linien
  • Verbinden Sie die eingerückten Linien mit den obigen Linien: :'<,'>s/\n /^A/
  • Markieren Sie die Linien erneut: gv
  • sortiere sie: :'<,'>sort
  • Markieren Sie die Linien noch einmal: gv
  • Teilen Sie die Zeilen zurück und stellen Sie die Einrückung wieder her: :'<,'>s/^A/\r /g

^Aoben ist das Zeichen Ctrl-A(ASCII SOH). Es kann sich um ein beliebiges Zeichen handeln, das nicht in den zu sortierenden Zeilen erscheint, aber Ctrl-Azur Rechnung passt. Sie können es als eingeben Ctrl-vCtrl-a.

Sato Katsura
quelle
2

Idee: Verbinden wir die nAnzahl der Zeilen unter Groß- und Kleinschreibung mit einer einzelnen Zeile. Folgen Sie dem Prozess für alle Fälle. Verwenden Sie dann sort, um die Fälle zu sortieren. Dann schneiden Sie diese Linien zurück und rücken sie ein.

Schritte:

1) Verbinden Sie die nfolgenden Zeilen, caseindem Sie diese eingeben. (in deinem Fall ist n 3)

:g/case / normal! 3gJ

2) Wählen Sie alle diese Fälle im visuellen Modus aus. Drücken Sie vot V, um alle Fälle auszuwählen. Drücken Sie :. Es wird so aussehen :'<,'>. Geben Sie sort ein.

:'<,'>sort

3) Legen Sie die Falllinien darunter. Wählen Sie sie erneut aus, indem Sie gv drücken.

:'<,'>s/\(;\|:\)    /&\r    /g

Dies teilt die Falllinien. Wenn Linien nicht richtig eingerückt sind, können Sie sie durch Auswahl von gvund dann ausrichten ==.

Dies funktioniert für eine beliebige Anzahl von Zeilen, vorausgesetzt, Sie verwenden die für Ihren Zweck angepassten Schritte.

SibiCoder
quelle