Bagaimana saya bisa menukar dua argumen dalam panggilan ke fungsi Python?
Jika saya menempatkan point
spasi di antara dua argumen ini:
self.assertEqual(json.loads(some.data), json_data)
dan kemudian M-t
( transpose-words
), saya mendapatkan:
self.assertEqual(json.loads(some.json), data_data)
Di sisi lain dengan CMt ( transpose-sexps
) saya mendapatkan:
self.assertEqual(json.loadsjson_data, (some.data))
Yang saya inginkan adalah:
self.assertEqual(json_data, json.loads(some.data))
Apakah ada perintah yang akan melakukan itu?
python
text-editing
Langshan Croad
sumber
sumber
transpose-subr
yang mengambilforward
fungsi dan menerjemahkannya ke dalamtranspose
fungsi. Jadi jika kita punyac-forward-arglist
(fungsi untuk berpindah dari satu fungsi arg ke yang berikutnya - AFAICT ini tidak ada) kita akan memilikinyac-transpose-arglist
.Jawaban:
Ini adalah sesuatu yang saya juga ingin miliki untuk waktu yang lama, dan di sini saya menemukan motivasi untuk mengerjakannya. Ini mungkin tidak terlalu kuat, tetapi pada percobaan pertama tampaknya mencakup kasus-kasus yang saya coba:
sumber
forward-sexp-function
, dan itu kelihatannya terlalu rumit karena koma. Saya kemudian mencoba untuk menirutraspose-sexp
untuk melakukan hal yang sama, dan, sekali lagi, harus memperhitungkan koma membuat ini sangat sulit. Saya tidak mengklaim ini selalu melakukan hal yang benar ketika datang ke daftar pembatas, mungkin hanya separuh waktu ...(aa, bb)
ketika kursor berada di yang pertamaa
. Ini juga tidak bekerja untuk mentransposeFOO(aaa *, bbb, ccc)
The*
entah bagaimana messes up mentransposisi.FOO(&aaa, bbb)
(& tidak menukar).Saya menggunakan variasi
transpose-sexps
yang terlihat untuk kasus yang Anda gambarkan dan mentransposasikan hal-hal yang dipisahkan oleh koma, atau hanya biasa sajatranspose-sexps
. Ini juga meninggalkan kursor di tempat bukannya menyeretnya ke depan, yang sedikit berbeda tapi saya pribadi suka.sumber
f(a=1, b=2)
(transpos sekitar)f(a=1, b=2)
- emacs.stackexchange.com/a/47930/2418Dalam mode yang menggunakan SMIE,
transpose-sexp
harus berfungsi dengan benar untuk kasus itu. Mereka masih akan gagal ketika simbol infiks (alias "pemisah") bukan a,
(atau a;
) tetapi kata (misalnyaand
).Jadi, pendapat saya adalah bahwa perintah untuk itu adalah
transpose-sexp
dan ketika ini tidak berfungsi dengan benar, saya menganggapnya sebagai bug (tetapi bug yang mungkin sulit dan / atau membutuhkan waktu untuk diperbaiki dan memiliki prioritas rendah, jadi jangan ' t tahan nafasmu). Cara untuk memperbaikinya adalah dengan menetapkanforward-sexp-function
ke fungsi yang akan tahu bahwa "setelah saya melihat koma, saya hanya melompati seluruh argumen".sumber
forward-sexp-function
tetapi Anda harus untuk menambahkan beberapa kode hanya menggunakan SMIEforward-sexp-function
dalam kasus-kasus di mana ia bekerja dengan cukup baik, karena dalam banyak kasus lain itu akan mengakibatkan perilaku yang membingungkan.