Bagaimana cara menambahkan awalan ke setiap baris?

35

Saya memiliki kode di bawah ini:

Hello
There
I am some code

Dan ingin menambahkan kode di depannya, seperti:

I said Hello
I said There
I said I am some code

Jadi bagaimana cara saya menambahkan awalan untuk setiap baris?

Luke
sumber

Jawaban:

47

Anda dapat menambahkan awalan dengan M-x string-rectangle, yang terikat C-x r t. Ini adalah bagian dari serangkaian perintah yang beroperasi pada seleksi persegi panjang ; ini memasukkan teks pada setiap baris dalam kotak.

Mulailah dengan menetapkan tanda di awal baris pertama, dan gerakkan kursor Anda ke karakter pertama dari baris terakhir yang ingin Anda awali:

*Hello
 There
▮I am some code

Kemudian gunakan C-x r t, masukkan awalan Anda ( I said) dan tekan RET. Ini menambahkan teks ke setiap baris dalam persegi panjang:

I said Hello
I said There
I said I am some code

Jika Anda tidak meluruskan kursor pada kolom yang sama dengan tanda Anda, itu akan menimpa bagian dari persegi panjang itu:

*Hello
 There
 I am▮ some code

dengan hasil perintah yang sama di:

I said o
I said e
I said  some code
Tikhon Jelvis
sumber
3
Anda adalah orang kedua yang mendapatkan lencana jawaban yang bagus :)
nicael
Alternatifnya adalah menggunakan M-x string-insert-rectangle. Ini sangat mirip, tetapi string-insert-rectangle menyisipkan di awal setiap baris pilihan, sedangkan string-rectangle menggantikan , jadi dengan yang terakhir Anda harus lebih tepat tentang pilihan Anda jika Anda tidak ingin menimpa apa pun.
Jeff Clites
32

Anda bisa menggunakan multi-kursor-mode , untuk meletakkan kursor di setiap baris. Kemudian, teks apa pun yang Anda ketikkan akan dimasukkan pada setiap baris.

Anda akan mulai dengan titik di awal potongan kode:

▮Hello
 There
 I am some code

Kemudian tekan C->dua kali. (Ini adalah kunci yang disarankan mengikat; Anda harus mengaturnya sendiri.) Ini menciptakan dua kursor tambahan pada dua baris berikut:

▮Hello
▮There
▮I am some code

Kemudian ketik I said. Teks akan ditambahkan pada setiap baris:

I said ▮Hello
I said ▮There
I said ▮I am some code

Terakhir tekan RETuntuk keluar dari beberapa mode kursor dan meninggalkan titik pada kursor terakhir:

I said Hello
I said There
I said ▮I am some code

Berikut adalah video yang menunjukkan cara kerjanya.

legoscia
sumber
26

Secara pribadi, saya lebih suka replace-regexp(ganti "^" dengan "Saya katakan").

artagnon
sumber
12

Pilihan lain adalah menggunakan makro, yang dapat menangani lebih banyak tugas daripada pilihan persegi panjang atau beberapa kursor, bahkan jika itu sedikit clunkier untuk kasus khusus ini.

Posisikan kursor di awal baris pertama dan tekan F3untuk mulai merekam, masukkan teks, gerakkan kursor ke awal baris berikutnya dan tekan F4untuk berhenti merekam. Sekarang tekan F4lagi untuk mengulangi makro, C-2 F4untuk mengulanginya dua kali, atau C-0 F4untuk mengulanginya sampai kesalahan (seperti kehabisan garis) ditemukan.

sanityinc
sumber
9

Anda dapat menginstal evil dan melakukannya dengan sejumlah cara vi-like - Saya lebih suka pemilihan blok visual menggunakan Ctrl+ Vuntuk menandai setiap baris dan kemudian Shift+ Iuntuk memasukkan dan kemudian ketik teks yang ingin Anda masukkan dan akhirnya tekan ESCuntuk keluar dari mode insert dan teks akan ditambahkan ke setiap baris. Ini sangat mirip dengan pilihan rectangular emacs tetapi sedikit penekanan tombol.

alexmurray
sumber
7

Ini sangat mirip dengan jawaban artagnon, tetapi replace-regexptidak terikat pada kunci apa pun.

Jadi, saya benar-benar menggunakan query-replace-regexpyang terikat secara default C-M-%dan kemudian mengganti ^dengan awalan yang diberikan I saiddan kemudian ketik !untuk mengganti semua tanpa diminta lagi.

B4hand
sumber
4

Jika Anda telah cua-modemengaktifkan, maka:

  • C-a untuk pindah ke awal baris,
  • C-RET untuk memulai persegi panjang,
  • (tombol bawah) dua kali untuk pindah ke baris ketiga,
  • I said sebagai teks yang akan disisipkan
  • C-RET untuk mengakhiri persegi panjang

Saya lebih suka cua-modecara kerjanya, dibandingkan dengan persegi panjang standar Emacs di mana yang setara adalah:

  • C-a untuk pindah ke awal baris,
  • C-SPC untuk memulai persegi panjang,
  • (tombol bawah) dua kali untuk pindah ke baris ketiga,
  • C-x r t I said RET untuk memasukkan teks

The cua-modemenyimpan dua penekanan tombol dibandingkan dengan standar Emacs persegi panjang.

Tetapi bagi saya, keuntungan tambahan dari cua-mode adalah bahwa saya dapat menambahkan teks ke persegi panjang (saya pribadi tidak tahu bagaimana menambahkan teks dengan persegi panjang standar Emacs). Dengan cua-mode, ini hanya satu RETtombol, dimasukkan sebelum I said.

thdox
sumber