¿Cómo puedo intercambiar dos argumentos en una llamada a una función de Python?
Si pongo point
el espacio entre estos dos argumentos:
self.assertEqual(json.loads(some.data), json_data)
y luego M-t
( transpose-words
), obtengo:
self.assertEqual(json.loads(some.json), data_data)
Por otro lado con CMt ( transpose-sexps
) obtengo:
self.assertEqual(json.loadsjson_data, (some.data))
Lo que quiero es:
self.assertEqual(json_data, json.loads(some.data))
¿Hay un comando que haga eso?
python
text-editing
Croad Langshan
fuente
fuente
transpose-subr
que toma unaforward
función y la traduce en unatranspose
función. Entonces, si tuviéramosc-forward-arglist
(función para pasar de una función arg a la siguiente - AFAICT esto no existe) tendríamosc-transpose-arglist
.Respuestas:
Esto es algo que yo también quería tener durante mucho tiempo, y aquí he encontrado algo de motivación para trabajar en ello. Probablemente no sea muy robusto, pero al primer intento parece cubrir los casos que probé:
fuente
forward-sexp-function
, y eso parecía ser demasiado engorroso debido a las comas. Luego traté de copiartraspose-sexp
para hacer lo mismo y, una vez más, tener que tener en cuenta las comas hace que esto sea realmente difícil. No pretendo esto siempre hace lo correcto cuando se trata de los delimitadores de la lista, tal vez sólo la mitad de las veces ...(aa, bb)
cuando el cursor está en el primeroa
. Esto tampoco funciona para la transposición.FOO(aaa *, bbb, ccc)
La transposición de*
alguna manera arruina.FOO(&aaa, bbb)
(y no se intercambia).Utilizo una variación de
transpose-sexps
ese aspecto para el caso que usted describe y transpone cosas separadas por comas, o simplemente lo hace de forma regulartranspose-sexps
. También deja el cursor en su lugar en lugar de arrastrarlo hacia adelante, lo cual es un poco diferente, pero personalmente me gusta.fuente
f(a=1, b=2)
(se transpone)f(a=1, b=2)
- emacs.stackexchange.com/a/47930/2418En los modos que usan SMIE,
transpose-sexp
debería funcionar correctamente para ese caso. Todavía fallarán cuando el símbolo infijo (también conocido como "separador") no sea una,
(o una;
) sino una palabra (por ejemploand
).Entonces, mi opinión es que el comando para eso es
transpose-sexp
y cuando esto no funciona correctamente, lo considero un error (pero un error que puede ser difícil y / o tomar tiempo para solucionarlo y tener baja prioridad, así que no lo haga) No aguantes la respiración). La forma de solucionarlo es estableciendoforward-sexp-function
una función que sepa que "después de ver una coma, simplemente salteé todo el argumento".fuente
forward-sexp-function
pero tendría que agregar algún código para usar solo SMIEforward-sexp-function
en los casos en que funciona lo suficientemente bien, ya que en muchos otros casos daría lugar a un comportamiento confuso.