Bagaimana cara saya menghilangkan string "default" (terakhir digunakan) di beberapa fungsi emacs?

12

Saya memiliki masalah berikut: ketika saya menggunakan 'Cx rt' (string-rectangle), saya diminta untuk memasukkan beberapa string, untuk mengganti persegi panjang yang dipilih. Katakanlah saya mengetik ";;" (mengomentari persegi panjang). Ini berfungsi dengan baik, tetapi lain kali saya memanggil fungsi yang sama, dan saya ingin mengganti dengan apa-apa (string kosong), saya tidak bisa melakukan itu, karena ada "default" string ";;" yang sebelumnya saya gunakan, dan jika saya tekan enter saja perintah itu akan menggunakan ";;" string bukan yang kosong. Bagaimana cara mengaturnya ke string kosong?

Masalah serupa yang saya miliki dengan beberapa fungsi pencarian / ganti. Pada dasarnya, ketika ia mengingat string terakhir yang saya gunakan, dan menetapkannya ke default, bagaimana cara saya "memasukkan" string kosong?

EDIT:

Kill-rectangle, yang disebutkan oleh YoungFrog memecahkan masalah spesifik, tetapi saya punya hal lain dalam pikiran: pada dasarnya, dalam apa pun fungsi emacs mengingat nilai terakhir yang Anda masukkan, dan menggunakannya sebagai "default" ketika Anda menekan enter, Anda harus dapat menghapus "default" itu untuk apa pun yang benar-benar default sebelum Anda menggunakan fungsinya. Ini adalah contoh lain:

Dalam mode dired, jika Anda 'Mx rgrep' itu meminta Anda untuk 3 input:

1) Apa yang harus dicari: apa pun yang Anda masukkan di sini, akan digunakan sebagai default saat Anda menggunakan rgrep. Seperti yang ditunjukkan oleh seseorang, tidak masuk akal untuk mencari string kosong, jadi menghapus nilai "default" ini memang tidak pernah diperlukan.

2) Selanjutnya akan ditanyakan file apa yang harus dicari. Sebenarnya standarnya adalah file "semua". Jika saya memasukkan * .txt, dan mencari, lain kali ketika saya menggunakan rgrep, * .txt akan digunakan sebagai "default". Sekarang saya ingin menghapus "default" * .txt ini, dan kembali ke default aslinya, "semua", sama seperti saya ingin menghapus ";" " "default" dalam fungsi string-rectangle ke default sebenarnya, string kosong.

Tentu saja, masalah khusus ini untuk semua file mungkin dapat diselesaikan dengan mengetik *? Tapi masalah umum ini berpotensi tetap dengan perintah lain yang mengingat nilai yang terakhir digunakan.

3) Selanjutnya akan meminta direktori Base, tidak ada masalah di sini.

Jadi, cara saya melihatnya, setiap kali emacs mencoba membantu saya dengan mengingat nilai terakhir saya yang digunakan dalam beberapa perintah (yang menurut saya sangat membantu sebagian besar waktu) harus ada cara untuk menghapus nilai yang digunakan seolah-olah saya tidak pernah menggunakan itu perintah sebelumnya.

PS Saya masih baru untuk emacs, dan mungkin fungsi yang saya butuhkan tidak diperlukan, karena selalu ada beberapa solusi?

mation
sumber
1
Saya percaya itu sulit, karena membaca dan pertukaran nilai default untuk string kosong tidak terjadi dalam fungsi yang sama dalam banyak kasus. Dalam kasus khusus ini delete-rectangleadalah opsi.
politza
Jika Anda ingin menyisipkan spasi dalam persegi panjang yang dipilih, Anda dapat menggunakan clear rectangle.
Kaushal Modi
Jika Anda hanya ingin memblokir komentar / tanda komentar, mengapa tidak menggunakannya comment-dwim? Memasukkan string "kosong" untuk pencarian tidak masuk akal, tetapi Anda dapat memasukkan string kosong untuk bagian pengganti. Saya ingin tahu untuk melihat lebih banyak contoh di mana memasukkan string kosong mungkin diperlukan oleh pengguna.
Kaushal Modi
3
Hanya melihat deskripsi Anda dengan cepat, tetapi sepertinya ada masalah dengan desain perintah string-rectangle. Setiap kali string kosong masuk akal sebagai input yang memungkinkan, harus ada cara untuk memasukkannya, karena dibedakan dari menerima nilai default. Perhatikan dengan seksama pada doc untuk perintah (dan pada kode sumbernya, jika Anda merasa nyaman dengan itu), untuk melihat apakah sebenarnya ada cacat desain di sini. Jika Anda berpikir ada, maka silahkan laporkan: M-x report-emacs-bug.
Drew
Sebab 2), Anda benar-benar bisa masuk all, yang sedikit berbeda dari *: cocok .*juga.
npostavs

Jawaban:

3

Jangan gunakan C-x r t( string-rectangle), gunakan C-x r k( kill-rectangle) sebagai gantinya.

YoungFrog
sumber
1
Saya hanya menjawab contoh spesifik yang diberikan karena IMO kasus umum (pertanyaan dalam judul) tidak menerima jawaban (umum). Namun, saya ingin menyebutkan bahwa C-j(alih-alih RET) dapat membantu dalam beberapa kasus, misalnya ido-mode.
YoungFrog
3

Dalam kasus umum, apa yang Anda inginkan tidak dapat dicapai. Ini karena beberapa utilitas dan mode di Emacs menyimpan riwayat penyelesaian-baca dalam variabel yang berbeda, bukan di satu lokasi. Anda dapat secara manual mengatur variabel sejarah ke nil( C-x r tmisalnya, (setq string-rectangle-history nil)), tetapi tidak menskala. Juga tidak mudah untuk menemukan nama-nama variabel sejarah tanpa membaca kode.

Faried Nawaz
sumber