Saya sering mengalami situasi di mana saya perlu menerapkan teks di sekitar suatu wilayah. Untuk HTML dan kasus sederhana sudah ada perpustakaan untuk ini. Tetapi bagaimana dengan kasus umum? Saya ingin ditanya apa yang akan saya masukkan mulai dan akhir dari wilayah ini.
elisp
text-editing
nperson325681
sumber
sumber
<?php
...?>
, dan kemudian, ketika Anda memilih wilayah dan jenis<?php
(atau pengikat tombol), buat pasangan itu dibungkus dengan pasangan. Tetapi afaik tidak ada cara mudah untuk menggunakan perpustakaan ini jika Anda memiliki banyak pasangan satu-shot.Jawaban:
Saya mencari di Google dan menemukan posting ini oleh John D. Cook . Dia menunjukkan bagaimana membangun fungsi interaktif sederhana untuk mendapatkan tag HTML / XML di seluruh wilayah dengan mudah. Dari sana saya memodifikasi fungsi untuk bertanya dua kali.
Lebih penting lagi, fungsi ini dapat juga digunakan sebagai alat bantu, misalnya ketika Anda ingin mengikat kunci untuk memetakan beberapa bit teks tertentu.
sumber
evil
saya menggunakan yang mengganggu di sini. Mungkin fungsi tipeinteractive "r"
bekerja lebih kuat?Saya akan menyarankan pendekatan yang berbeda. Ketika ada suatu wilayah, menurut definisi
point
harus di awal (atau akhir) dari wilayah tersebut, danmark
akan berada di akhir (atau awal). Yang berarti Anda dapat memasukkan teks yang Anda inginkan di titik, dan kemudian menggunakanexchange-point-and-mark
, yaituC-x C-x
, untuk melompat ke ujung wilayah lain. Masukkan bagian kedua bungkus Anda dan Anda selesai.Anda tidak diminta secara eksplisit diminta untuk memasukkan teks, tetapi saya tidak bisa membayangkan akan ada cara untuk mencapai hal yang sama dengan sedikit usaha.
sumber
multiple-cursors
dapat diubah untuk menyisipkan teks secara bersamaan di awal dan akhir wilayah aktif.C-x C-x
. Dengan jawaban Anda, Anda perlu memanggil fungsi Anda (C-c something
), dan Anda juga harus menekanreturn
setelah setiap entri. Jadi, apa pun yang Anda lakukan, Anda memiliki dua penekanan tombol lagi. Yang mengatakan, itu tidak membantu jika Anda menginginkan sesuatu untuk dipanggil dari elisp.Hanya demi variasi:
Cara lain untuk melakukan ini dengan teks awal dan akhir sewenang-wenang adalah dengan menggunakan
replace-regexp
di wilayah: cocokkan.+
dan ganti denganbefore \& after
, atau teks apa pun yang ingin Anda gunakan untukbefore
danafter
.Anda bisa menulis perintah lakukan untuk ini, tapi saya sedang memikirkan kasus di mana dalam file yang diberikan Anda ingin menerapkan teks awal / akhir yang sama di beberapa tempat. Anda dapat merekam makro atau cukup gunakan riwayat minibuffer untuk mengulangi di wilayah lain.
Tentu saja jika teks yang ingin Anda bungkus dapat diekspresikan sebagai ekspresi reguler maka Anda bahkan tidak perlu memilih wilayah dan dapat melakukan
query-replace-regexp
pada buffer, tetapi mungkin teks yang ingin Anda bungkus tidak konsisten.sumber