Saya telah menggunakan Structural Editing kursif (mode seperti paredit untuk Intellij dan Cursive) dan saya menemukan perintah yang bagus di sana yang disebut move form-up (dan bawah).
Pindahkan formulir ke atas apakah ini ( |
maksudnya):
(+ 1 |(+ 2 3) 4) => (+ (+ 2 3) 1 4)
dan Pindahkan formulir ke bawah adalah analog:
(+ 1 |(+ 2 3) 4) => (+ 1 4 (+ 2 3))
Apakah mungkin untuk melakukan ini pada Emacs paredit-mode? Saya pikir itu bukan pada set paredit dasar (setidaknya tidak dijelaskan pada lembar contekan ini
C-M-t
melakukan hal yang sama. Tapi saya kira apa yang Anda maksudkan adalah bahwa bentuk yang sama terus dipindahkan, daripada memiliki kemajuan bertukar pasangan seks berikutnya.Jawaban:
Seperti yang disarankan @Drew,
C-M-t
lakukan apa yang Anda inginkan. Aturannya seperti ini:C-M-t
(yang menjalankantranspose-sexp
).Atau, Anda dapat dengan mudah berpikir bahwa ini bukan transposing tetapi hanya untuk bergerak maju, Anda harus menempatkan titik setelah sexp yang ingin Anda bergerak.
Namun, ada satu kemudahan yaitu, ketika Anda ingin mengubah jenis kelamin kiri ke belakang, Anda menggunakan yang sama
C-M-t
tetapi disertakan dengan argumen awalan negatif dan ini tidak nyaman. Masalah lain adalah bahwa titik tidak akan mengikuti transpos mundur sexp kiri . Untuk mengatasi masalah ini, kami membuat versi terbalik daritranspose-sexps
:Kemudian, ikat ke
C-M-y
yang di sebelahnyaC-M-t
dan gratis di Emacs default.Ini demo; Anda akan melihat bahwa
(MY-SEXP1)
ada di sebelah kiri sepanjang waktu untuk bergerak maju / mundur:sumber
Itu mungkin dilakukan dengan lispy , yang merupakan bentuk lanjutan dari
paredit-mode
.Untuk kasus penggunaan Anda:
Satu-satunya hal adalah kursor harus berada di paren, yang ada dalam contoh Anda:
Anda juga dapat memindahkan beberapa sexps sekaligus dengan wdan s, jika Anda menandainya dengan suatu wilayah. Lihat dokumentasi untuk info lebih lanjut.
sumber
Berikut adalah perintah lain (dari perpustakaan
misc-cmds.el
) yang melakukan cukup banyak apa yang Anda minta. Ikat saja ke satu tombol (C-M-t
atau apa pun). Gunakan untuk menggerakkan sexp maju dan mundur berulang kali.Argumen awalan negatif mentranspos mundur, seperti
transpose-sexp
, tetapi juga meninggalkan titik siap untuk melakukan transposisi mundur lain. Dan ketika mengulang, arg awalan negatif hanya membalik arah.Jadi jika Anda mengikat perintah ke, katakanlah,
C-o
lalu gerakkan sexp yang ada di sebelah kiri titik ke kanan tiga kali, lalu ke kiri dua kali, lalu ke kanan sekali.C-o C-o C-o
C--
C-o C-o
C--
C-o
Argumen numerik awalan hanya berpengaruh untuk penggunaan pertama, yaitu, tidak saat mengulang - saat mengulang, gerakan selalu satu jenis kelamin setiap kali.
(Catatan: Perilaku yang
transpose-sexps
diubah dalam 24.4, maka uji versi di sini. Sebelum 24.4, titik berakhir di tempat yang tepat untuk melanjutkan (mis. Ulangi). Mulai dengan 24.4, titik berada di tempat yang salah untuk itu. Apakah itu sebuah regresi atau menambahkan fitur yang berguna atau memperbaiki beberapa bug lain mungkin di mata yang melihatnya. ;-) Saya mengajukan bug Emacs # 20698 untuk ini, baru saja.)sumber