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
endRETReemplazar
fooconbar:M-%
fooRETbarRET !Esto hace uso del hecho de que
query-replacefuncionará 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/endcuando 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 widenpara restaurar el contenido del búfer.fuente
begin/endson delimitadores en un lenguaje de programación, es probable que pueda usarC-M-Spacepara ejecutarmark-sexppara seleccionar la región en un comando.C-x n n(narrow-to-region) yC-x n w(widen).