He estado usando la Edición Estructural de cursive (un modo similar a un crédito para Intellij y Cursive) y encontré un buen comando llamado move form-up (and down).
Mover hacia arriba hace esto (el |
es el punto):
(+ 1 |(+ 2 3) 4) => (+ (+ 2 3) 1 4)
y Move form down es análogo:
(+ 1 |(+ 2 3) 4) => (+ 1 4 (+ 2 3))
¿Es posible hacer esto en el modo de crédito Emacs? Creo que no está en el conjunto básico de crédito (al menos no se describe en esta hoja de trucos)
C-M-t
hace lo mismo. Pero supongo que lo que quieres decir es que se sigue moviendo la misma forma, en lugar de tener que cambiar el progreso al siguiente par de sexps.Respuestas:
Como sugirió @Drew,
C-M-t
hace lo que quieres. La regla es así:C-M-t
(que se ejecutatranspose-sexp
).O simplemente puede pensar que esto no es transposición, sino simplemente avanzar, debe colocar un punto después del sexp que desea mover.
Sin embargo, hay uno conveniente que es, cuando desea transponer el sexp izquierdo hacia atrás, usa el mismo
C-M-t
pero se le proporciona un argumento de prefijo negativo y esto es inconveniente. Otro problema es que ese punto no seguirá al sexp izquierdo transpuesto hacia atrás . Para resolver este problema, creamos una versión inversa detranspose-sexps
:Luego, únelo al
C-M-y
que está al ladoC-M-t
y es gratis en Emacs predeterminado.Aquí hay una demostración; notarás que
(MY-SEXP1)
está a la izquierda todo el tiempo para avanzar / retroceder:fuente
Es posible hacerlo con lispy , que es una forma avanzada de
paredit-mode
.Para su caso de uso:
Lo único es que el cursor tiene que estar en paren, que es en su ejemplo:
También puede mover varios sexps a la vez con wy s, si los marca con una región. Vea la documentación para más información.
fuente
Aquí hay otro comando (de la biblioteca
misc-cmds.el
) que hace más o menos lo que solicitas. Simplemente vincúlelo a una sola tecla (C-M-t
o lo que sea) Úselo para mover un sexp hacia adelante y hacia atrás repetidamente.Un prefijo negativo arg se transpone hacia atrás, como
transpose-sexp
, pero también deja el punto listo para hacer otra transposición hacia atrás. Y cuando se repite, un prefijo negativo arg simplemente cambia la dirección.Entonces, si vincula el comando para, digamos,
C-o
luego mueve el sexp que está a la izquierda del punto a la derecha tres veces, luego a la izquierda dos veces, luego a la derecha una vez.C-o C-o C-o
C--
C-o C-o
C--
C-o
Un argumento de prefijo numérico tiene un efecto solo para el primer uso, es decir, no cuando se repite; cuando se repite, el movimiento siempre es un sexp a la vez.
(Nota: El comportamiento
transpose-sexps
cambió en 24.4, de ahí la prueba de versión aquí. Antes de 24.4, el punto terminó en el lugar correcto para continuar (por ejemplo, repetir). Comenzando con 24.4, el punto está en el lugar equivocado para eso. una regresión o agrega una característica útil o corrige algún otro error presumiblemente está en el ojo del espectador. ;-) Presenté el error Emacs # 20698 para esto, justo ahora).fuente