Como posso trocar dois argumentos em uma chamada para uma função Python?
Se eu colocar point
o espaço entre esses dois argumentos:
self.assertEqual(json.loads(some.data), json_data)
e então M-t
( transpose-words
), eu recebo:
self.assertEqual(json.loads(some.json), data_data)
Por outro lado, com CMt ( transpose-sexps
) eu recebo:
self.assertEqual(json.loadsjson_data, (some.data))
O que eu quero é:
self.assertEqual(json_data, json.loads(some.data))
Existe um comando que fará isso?
python
text-editing
Croad Langshan
fonte
fonte
transpose-subr
que pega umaforward
função e a converte em umatranspose
função. Portanto, se tivéssemosc-forward-arglist
(função para passar de uma função arg para a seguinte - AFAICT, isso não existe), teríamosc-transpose-arglist
.Respostas:
Isso também é algo que eu queria ter há muito tempo, e aqui encontrei alguma motivação para trabalhar nisso. Provavelmente não é muito robusto, mas na primeira tentativa parece cobrir os casos que tentei:
fonte
forward-sexp-function
, e isso parecia muito complicado por causa das vírgulas. Tentei copiar o arquivotraspose-sexp
para fazer a mesma coisa e, novamente, ter que explicar vírgulas torna isso realmente difícil. Eu não reivindico isso sempre faz a coisa certa quando se trata de lista delimitadores, talvez apenas metade do tempo ...(aa, bb)
quando o cursor está no primeiroa
. Isso também não funciona para a transposiçãoFOO(aaa *, bbb, ccc)
As*
alguma forma messes-se de transposição.FOO(&aaa, bbb)
(& não troca).Eu uso uma variação
transpose-sexps
que procura o caso que você descreve e transpõe as coisas separadas por vírgulas, ou apenas faz regulartranspose-sexps
. Ele também deixa o cursor no lugar em vez de arrastá-lo para frente, o que é um pouco diferente, mas eu pessoalmente gosto.fonte
f(a=1, b=2)
(transpõe ao redor)f(a=1, b=2)
- emacs.stackexchange.com/a/47930/2418Nos modos que usam o SMIE,
transpose-sexp
deve funcionar corretamente para esse caso. Eles ainda falharão quando o símbolo do infix (também conhecido como "separador") não é um,
(ou a;
), mas é uma palavra (por exemploand
).Portanto, minha opinião é que o comando para isso é
transpose-sexp
e, quando isso não funcionar corretamente, considero-o um bug (mas um bug que pode ser difícil e / ou levar tempo para corrigir e ter baixa prioridade, então não ' prenda a respiração). A maneira de corrigi-lo é definindoforward-sexp-function
uma função que saiba que "depois de ver uma vírgula, apenas pulo o argumento inteiro".fonte
forward-sexp-function
mas você teria adicionar algum código para usar apenas o SMIEforward-sexp-function
nos casos em que funciona bem o suficiente, pois em muitos outros casos isso resultaria em comportamento confuso.