Bash readline menghapus sampai slash sebelumnya

15

Dalam mode bash emacs, apakah ada cara menghapus sampai karakter slash sebelumnya? Sebagai contoh jika saya memasukkan perintah cp /usr/local/bin/reallylongincorrectfolder /home/myname/reallylong_and_correct_pathdan ingin menghapus saja. reallylongincorrectfolderApakah ada jalan pintas? Ini adalah skenario yang sangat comman bagi saya di bash. Sesuatu seperti dF<char>di vi?

woodstok
sumber

Jawaban:

9
bind -P |grep unix-filename-rubout

Untuk menguji ikatan kunci dengan mis. Ctrl- b:

bind \\C-b:unix-filename-rubout

Untuk penggunaan permanen, tambahkan ke ~/.inputrc

pengguna1338062
sumber
2
Untuk menambahkannya ke ~/.inputrc, menambahkan baris seperti ini ke file yang: "\C-b": unix-filename-rubout. Untuk melihat efeknya, Anda harus memulai shell bash baru (atau menjalankan beberapa program lain yang menggunakan pustaka readline GNU).
Croad Langshan
11

Alt- Backspacedan Ctrl- wumumnya dipetakan ke backward-kill-word, yang melakukan itu. Jika Anda ingin mengetahui apa yang dipetakan pada sistem Anda (jika ada), jalankan bind -P | grep '^backward-kill-word'.

Seperti yang dijelaskan oleh @Barmar , ini berbeda dari unix-word-rubout, yang menghilangkan batas ruang sebelumnya.

l0b0
sumber
Tapi itu akan membunuh seluruh kata .. Saya ingin membunuh hanya sampai tebasan terakhir
woodstok
Itu menghapus hanya untuk tebasan terakhir di sini. Slash adalah salah satu pemisah kata default. Apakah Anda yakin menggunakan Bash?
l0b0
Buruk saya .. Alt-Backspace tidak menghapusnya sampai garis miring terakhir. Apa perbedaan antara ALt-BackSpace dan Ctrl-W?
woodstok
3
Ctl-w biasanya terikat ke unix-word-rubout: Bunuh kata di belakang titik, menggunakan spasi putih sebagai batas kata.
Barmar
2
Ini tidak bekerja. "Kata-kata terdiri dari karakter alfanumerik (huruf dan angka)". Karenanya itu akan berhenti pada lebih dari sekedar tebasan. Default-unbound unix-filename-ruboutsedikit lebih baik, karena itu akan berhenti di white space dan slash.
Sparhawk
6

Masukkan ini di Anda .inputrcdan mulai shell baru:

C-b:unix-filename-rubout

Ctrl- bsekarang menghapus mundur ke tebasan berikutnya.

Nirvana!

Jangan lupa Ctrl- XCtrl- Eakan meluncurkan editor Anda sehingga Anda dapat mengedit baris perintah yang rumit dengan nyaman.

Greg Bell
sumber