A menudo tengo una situación en la que necesito aplicar texto alrededor de una región. Para HTML y casos simples ya hay bibliotecas para esto. ¿Pero qué hay del caso general? Me gustaría que me preguntaran qué insertaré al principio y al final de la región.
elisp
text-editing
nperson325681
fuente
fuente
<?php
...?>
, y luego, cuando seleccione una región y escriba<?php
(o una combinación de teclas), envuélvala en el par. Pero afaik no hay una manera fácil de usar estas bibliotecas si tiene muchos pares de una sola vez.Respuestas:
Busqué en Google y encontré esta publicación de John D. Cook . Él demuestra cómo construir una función interactiva simple para obtener etiquetas HTML / XML fácilmente en la región. A partir de eso modifiqué la función para preguntar dos veces.
Más importante aún, esta función también se puede utilizar como una herramienta auxiliar, por ejemplo, cuando desea vincular teclas para asignar algunos bits de texto específicos.
fuente
evil
que yo uso eso interfiere aquí. ¿Quizás una función de tipointeractive "r"
funcionó de manera más robusta?Sugeriría un enfoque diferente. Cuando hay una región, por definición
point
debe estar al principio (o al final) de la región, ymark
estará al final (o al principio). Lo que significa que puede ingresar el texto que desea en el punto y luego usarexchange-point-and-mark
, es decirC-x C-x
, para saltar al otro extremo de la región. Ingrese la segunda mitad de su envoltorio y listo.No se le solicita explícitamente que se le solicite el texto de inserción, pero no puedo imaginar que haya una manera de lograr lo mismo con menos esfuerzo.
fuente
multiple-cursors
podría modificarse algo así para insertar texto simultáneamente al principio y al final de la región activa.C-x C-x
. Con su respuesta, debe llamar a su función (C-c something
), y también debe presionarreturn
después de cada entrada. Así que no importa lo que hagas, tienes dos teclas más. Dicho esto, no ayuda si quieres que alguien llame desde elisp.Solo por el bien de la variedad:
Otra forma de hacer esto con un texto arbitrario de inicio y fin sería usar
replace-regexp
en la región: emparejar.+
y reemplazar conbefore \& after
, o cualquier texto que desee usar parabefore
yafter
.Podría escribir un comando para hacer esto, pero estoy pensando en un caso en el que en un archivo determinado desea aplicar el mismo texto de inicio / finalización en varios lugares. Puede grabar una macro o simplemente usar el historial de minibúfer para repetir en otra región.
Por supuesto, si el texto que desea ajustar puede expresarse como una expresión regular, entonces ni siquiera necesitará seleccionar una región y puede hacer un
query-replace-regexp
en el búfer, pero presumiblemente el texto que desea ajustar no es tan consistente.fuente