Una de las cosas que extraño de vim es poder escribir un comando de sustitución que funcione en varias líneas, por ejemplo:
:/begin/,/end/s/foo/bar/g
El comando anterior sustituye "foo" por "bar" que comienza con la primera línea que contiene "begin" y termina con la siguiente línea que contiene "end".
¿Hay alguna manera de hacer algo similar en emacs?
regular-expressions
replace
evil
vim-emulation
Larry Coleman
fuente
fuente
Aquí hay una forma de hacerlo que usa solo la funcionalidad incorporada:
Con el punto en la línea que contiene la primera aparición de
begin
, presione C-SPC.Pasar a la siguiente aparición de
end
:C-s
end
RETReemplazar
foo
conbar
:M-%
foo
RETbar
RET !Esto hace uso del hecho de que
query-replace
funcionará en la región activa en lugar de todo el búfer si hay uno.Por supuesto, también puede definir un comando personalizado:
Este comando siempre buscará desde el principio del búfer, por lo que el punto puede estar después
begin
/foo
/end
cuando lo invocas.Configure una combinación de teclas para ello a través de:
fuente
En general, esto es algo que usarías
narrow-to-region
.Mueve el cursor (por ejemplo, buscando) al comienzo de la región y presiona
C-SPC
, luego mueve al final de la región y escribeM-x narrow-to-region
. Ahora puede emitir cualquier comando de búsqueda y reemplazo que desee y solo se aplicarán a una parte reducida del búfer. Una vez que haya terminado, escribaM-x widen
para restaurar el contenido del búfer.fuente
begin
/end
son delimitadores en un lenguaje de programación, es probable que pueda usarC-M-Space
para ejecutarmark-sexp
para seleccionar la región en un comando.C-x n n
(narrow-to-region
) yC-x n w
(widen
).