Wie kann ich zwei Argumente in einem Aufruf einer Python-Funktion austauschen?
Wenn ich point
den Abstand zwischen diesen beiden Argumenten einstelle:
self.assertEqual(json.loads(some.data), json_data)
und dann M-t
( transpose-words
) bekomme ich:
self.assertEqual(json.loads(some.json), data_data)
Andererseits bekomme transpose-sexps
ich mit CMt ( ):
self.assertEqual(json.loadsjson_data, (some.data))
Was ich will ist:
self.assertEqual(json_data, json.loads(some.data))
Gibt es einen Befehl, der das macht?
python
text-editing
Croad Langshan
quelle
quelle
transpose-subr
die eineforward
Funktion aufnimmt und in einetranspose
Funktion übersetzt. Wenn wir also hättenc-forward-arglist
(Funktion, um von einer Funktion arg zur nächsten zu wechseln - AFAICT existiert nicht), hätten wirc-transpose-arglist
.Antworten:
Auch das wollte ich schon lange haben, und hier habe ich eine gewisse Motivation gefunden, daran zu arbeiten. Es ist wahrscheinlich nicht sehr robust, aber beim ersten Versuch scheint es die Fälle abzudecken, die ich versucht habe:
quelle
forward-sexp-function
, und die schien wegen der Kommas zu umständlich zu sein. Ich habe dann versucht, Nachahmertraspose-sexp
zu machen, um dasselbe zu tun, und wieder macht es das wirklich schwierig, Kommas zu berücksichtigen. Ich behaupte nicht, dass dies immer das Richtige ist, wenn es darum geht, Trennzeichen(aa, bb)
wenn sich der Cursor auf dem ersten befindeta
. Dies funktioniert auch nicht beim Transponieren.FOO(aaa *, bbb, ccc)
Das Transponieren ist*
irgendwie durcheinander.FOO(&aaa, bbb)
(& tauscht nicht).Ich verwende eine Variation davon
transpose-sexps
, die nach dem Fall sucht, den Sie beschreiben, und transponiere Dinge, die durch Kommas getrennt sind, oder nur reguläre Dingetranspose-sexps
. Außerdem bleibt der Cursor an Ort und Stelle, anstatt ihn nach vorne zu ziehen, was etwas anders ist, aber ich persönlich mag.quelle
f(a=1, b=2)
(es transponiert herum)f(a=1, b=2)
- emacs.stackexchange.com/a/47930/2418In Modi, die SMIE verwenden,
transpose-sexp
sollte dies für diesen Fall korrekt funktionieren. Sie schlagen immer noch fehl, wenn das Infix-Symbol (auch als "Trennzeichen" bezeichnet) kein,
(oder ein;
), sondern ein Wort (zand
. B. ) ist.Ich bin der Meinung, dass der Befehl dafür lautet
transpose-sexp
und wenn dies nicht richtig funktioniert, betrachte ich ihn als Fehler (aber einen Fehler, der schwierig sein kann und / oder Zeit braucht, um ihn zu beheben und eine niedrige Priorität zu haben, also nicht ' nicht den Atem anhalten). Die Möglichkeit, dies zu beheben, besteht darinforward-sexp-function
, eine Funktion festzulegen, die weiß, dass "nachdem ich ein Komma gesehen habe, springe ich einfach um das gesamte Argument herum".quelle
forward-sexp-function
aber Sie hätten es Hinzufügen von Code, um SMIEs nurforward-sexp-function
in den Fällen zu verwenden, in denen dies gut genug funktioniert, da dies in vielen anderen Fällen zu verwirrendem Verhalten führen würde.