¿Emacs tiene el equivalente del comando VIMs ci "? Básicamente quiero reemplazar el texto dentro de un conjunto de comillas.
En vim puedo ci) o ci] o ci} para "cambiar interno *" ...
Fuera de la parte superior de mi cabeza, el comando más cercano es el M-z "
que elimina todo desde el punto hasta la próxima aparición del "personaje".
También existe C-M-k
, también conocido como "matar la expresión equilibrada", que eliminará una declaración entre paréntesis completa o una cadena entre comillas doble, etc., según la definición de los modos actuales de "expresión equilibrada" y el carácter actualmente bajo el punto (es decir, solo funciona si el cursor está en la apertura '"' o '(' etc.).
De manera similar a la sugerencia de Justin, CM-SPACE le ofrece "mark-sexp", que seleccionará el par de equilibrio, la cita, etc. y luego puede hacer Cw o lo que sea para que desaparezca. En caso de que quiera VER lo que está a punto de eliminar antes de eliminarlo ...
¡Si! El equivalente de VIMs ci "comando en Emacs es ... ci" :-)
http://www.emacswiki.org/emacs-de/Vimpulse
Acabo de tropezar con esta pregunta; Aquí hay una solución personalizada que me funcionó:
(defun seek-backward-to-char (chr)
"Seek backwards to a character"
(interactive "cSeek back to char: ")
(while (not (= (char-after) chr))
(forward-char -1)))
(defun delete-between-pair (char)
"Delete in between the given pair"
(interactive "cDelete between char: ")
(seek-backward-to-char char)
(forward-char 1)
(zap-to-char 1 char)
(insert char)
(forward-char -1))
Luego vincule delete-between-pair a la clave que desee. Para mí, lo tengo vinculado a Cz i.
Me temo que no sé acerca de la función ci de VIM, pero ¿ha visto reemplazar Egecs regexp? No puedo hablar de la semántica exacta o de lo fácil que es usarlo en comparación, pero es lo que usaría para lo que creo que quieres.
He hecho un modo menor que proporciona algunas de esas instalaciones de Vim llamadas Markit .
fuente
Magnars (autor del sitio EmacsRocks) escribió este complemento para hacer exactamente lo que está pidiendo.
https://github.com/magnars/change-inner.el
Obviamente, también puedes usar el modo Evil.
fuente
Aquí está mi versión que eliminará todo dentro (o incluyendo) un par de caracteres coincidentes. Los pares de caracteres se definen en una lista para que se conozcan los caracteres iniciales / finales coincidentes. Lo he asignado a "Cc i" para cambiar y "Cc a" para cambiar todo.
También copia los caracteres eliminados en el portapapeles para pegarlos más tarde.
fuente
Esto era algo que me faltaba de Vim, y
zap-to-char
no parecía cortarlo bien.Aquí está mi humilde intento de recrear "ci" y "ca":
Normalmente, la condición-caso no es necesaria, ya que el tercer parámetro (opcional) de búsqueda hacia adelante / búsqueda hacia atrás está destinado a indicar qué hacer en caso de que falle la búsqueda. Pero por alguna razón, colocar una segunda búsqueda como el tercer parámetro para el primero produce un comportamiento extraño.
fuente
Probé las soluciones aquí, pero encontré que cada una de ellas era de alguna manera, así que se me ocurrió esto. Acepta un delimitador inicial o final, y utiliza funciones integradas de Emacs para evitar la necesidad de una tabla de traducción para delimitadores.
fuente