Bagaimana cara mengganti karakter dengan baris baru di Emacs?

285

Saya mencoba mengganti karakter - katakan ;- dengan baris baru menggunakan replace-stringdan / atau replace-regexpdi Emacs.

Saya sudah mencoba perintah berikut:

  • M-x replace-string RET ; RET \n

    Ini akan menggantikan ;dengan 2 karakter: \n.

  • M-x replace-regex RET ; RET \n

    Ini menghasilkan kesalahan berikut (ditunjukkan dalam minibuffer):

    Penggunaan `\ 'dalam teks pengganti tidak valid.

Apa yang salah dengan menggunakan replace-stringuntuk tugas ini? Apakah ada cara lain untuk melakukannya?

Terima kasih.

Lei
sumber

Jawaban:

427

M-x replace-string RET ; RET C-q C-j.

  • C-quntuk quoted-insert,

  • C-j adalah baris baru.

Bersulang!

Jonathan Arkell
sumber
3
Cq adalah quote-insertyang mengutip karakter selanjutnya.
Joe Casadonte
2
Saya percaya itu sebenarnya "dikutip" daripada "kutipan", seperti dalam "kutipan-masukkan". Setidaknya begitulah pada versi 22.1.
Bryan Oakley
8
C-jadalah 0x0akode kontrol literal , dibandingkan Retyang merupakan kunci di sebelah kutipan dan kirim Anda 0x0d. en.wikipedia.org/wiki/C0_and_C1_control_codes
Jonathan Arkell
2
Catatan untuk pengguna vim, gunakan C-jdi emacs , saat C-mdi vim .
Alpha TAN
2
@ JonathanArkell Itulah deskripsi cara kerjanya, tetapi tidak mengapa . Di dalam editor, Ret menghasilkan 0x0a, jadi mengapa harus menghasilkan 0x0d dalam kutipan-sisipkan? Itu tidak masuk akal. (Hanya karena kode keyboard internal 0x0d karena alasan historis? Kami menggunakan peta kunci di semua tempat, mengapa tidak di sini yang masuk akal?)
vog
74

Ada empat cara yang saya temukan untuk memasukkan baris baru ke minibuffer.

  1. C-o

  2. C-q C-j

  3. C-q 12 (12 adalah nilai oktal dari baris baru)

  4. C-x oke jendela utama, bunuh baris baru dengan C-k, lalu C-x okembali ke minibuffer, tarik denganC-y

slipmthgoose
sumber
10
+1 untuk disebutkan C-o! Satu stroke kunci kurang dibandingkan dengan C-q C-j. Tidak terpikir untuk menggunakan yang sebelumnya.
itsjeyd
Terima kasih untuk versi 4! Bermanfaat jika Anda memiliki Co dan Cq rebound.
Joachim W
Terima kasih banyak. Bisakah Anda menjelaskan mengapa Co bekerja dan Cq Cj tidak?
Christian Madsen
C-otidak memindahkan titik setelah memasukkan baris baru di minibuffer, jadi Anda masih perlu menekan tombol panah kanan juga jika Anda ingin memasukkan sesuatu setelah baris baru di string pengganti.
Robin Green
Pada versi Emacs 25.2.2 saya, C-oakan memasukkan baris baru di jendela utama saat menggunakan pencarian, sementara C-q C-jakan memasukkan baris baru di minibuffer. C-otidak bekerja dengan permintaan - ganti sekalipun.
TC Proctor
25

Jangan lupa bahwa Anda selalu dapat memotong dan menempel ke minibuffer.

Jadi, Anda bisa menyalin karakter baris baru (atau string apa pun) dari buffer Anda, lalu mencabutnya saat diminta untuk teks pengganti.


sumber
2
Ini benar-benar ide yang bagus untuk karakter yang saya tidak tahu kunci kuncinya.
Lei
Ah ah ! sangat sederhana !
Jérémy Pouyet
8

Lebih eksplisit:

Untuk mengganti karakter titik koma (;) dengan baris baru, ikuti langkah-langkah tepat ini.

  1. cari kursor di kiri atas buffer yang berisi teks yang ingin Anda ubah
  2. Ketik mx replace-string dan tekan RETURN
  3. mini-buffer akan menampilkan sesuatu seperti ini: Ganti string (default ^ ->):
  4. Ketikkan karakter yang ingin Anda ganti. Pada kasus ini, ; dan tekan RETURN
  5. mini-buffer akan menampilkan sesuatu seperti ini: string; dengan:
  6. Sekarang jalankan Cq Cj
  7. Semua instance semi-colon akan diganti baris baru (dari lokasi kursor ke ujung buffer sekarang akan muncul)

Sedikit lebih dari yang dikatakan penjelasan aslinya.

afc
sumber
2

Beralih ke mode teks

M-x text-mode

Sorot blok ke indent

Indentasi

C+M \

Beralih kembali ke mode apa pun ..

enkdr
sumber
0

hanya sebaris: C-M-S-%(jika kunci mengikat masih default) dari replace-string^J

Aiad Faris
sumber