Salah satu hal yang saya lewatkan dari vim adalah bisa mengetikkan perintah substitusi yang akan bekerja pada banyak baris, misalnya:
:/begin/,/end/s/foo/bar/g
Perintah di atas menggantikan "foo" untuk "bar" dimulai dengan baris pertama yang berisi "mulai" dan berakhir dengan baris berikutnya setelah yang berisi "akhir".
Apakah ada cara untuk melakukan hal serupa di emacs?
regular-expressions
replace
evil
vim-emulation
Larry Coleman
sumber
sumber
Berikut adalah salah satu cara melakukannya yang hanya menggunakan fungsionalitas bawaan:
Dengan titik di baris yang berisi kemunculan pertama
begin
, tekan C-SPC.Pindah ke kejadian berikutnya
end
:C-s
end
RETGanti
foo
denganbar
:M-%
foo
RETbar
RET !Ini memanfaatkan fakta yang
query-replace
akan berfungsi pada wilayah aktif alih-alih seluruh buffer jika ada.Tentu saja, Anda juga dapat mendefinisikan perintah khusus:
Perintah ini akan selalu mencari dari awal buffer, jadi titiknya bisa setelah
begin
/foo
/end
ketika Anda memintanya.Siapkan kunci yang mengikat untuk itu melalui:
sumber
Secara umum, ini adalah sesuatu yang akan Anda gunakan
narrow-to-region
.Anda memindahkan kursor (misalnya, dengan mencari) ke awal wilayah dan tekan
C-SPC
, lalu pindah ke ujung wilayah dan ketikM-x narrow-to-region
. Sekarang Anda dapat mengeluarkan pencarian apa pun dan mengganti perintah yang Anda inginkan dan itu hanya akan berlaku untuk bagian penyempitan buffer. Setelah selesai, ketikM-x widen
untuk mengembalikan konten buffer.sumber
begin
/end
adalah pembatas dalam bahasa pemrograman, Anda mungkin dapat menggunakanC-M-Space
untuk menjalankanmark-sexp
untuk memilih wilayah dalam satu perintah.C-x n n
(narrow-to-region
) danC-x n w
(widen
).