Apakah mungkin untuk mengkonfigurasi ctrl-w (hapus kata)?

40

Biasanya, Ctrl+ Wmenghapus kembali ke spasi putih terakhir.

Apakah mungkin mengonfigurasinya untuk menggunakan karakter tambahan, seperti /?

Sunting: Agar lebih jelas: Saya tidak ingin mengonfigurasi kunci untuk itu, saya ingin penghapusan juga berhenti /.

Contoh:

vim /foo/bar^W
vim /foo/
SkaveRat
sumber

Jawaban:

29

Apa yang berhasil bagi saya adalah menambahkan baris berikut ke .bashrc saya

stty werase undef
bind '\C-w:unix-filename-rubout'

Anda memerlukan garis undef jika tidak, bash mengabaikan ikatan baru Anda C-w

mkm
sumber
3
Perlu dicatat bahwa stty werase undefakan menghentikan Anda menggunakan Cw dalam program apa pun (bind akan memungkinkan Anda untuk digunakan dalam readline)
0fnt
24

Anda harus dapat menggunakan Esc, lalu mundur mundur untuk menghapus kata-kata yang dibatasi oleh garis miring.

Anda dapat mengubah ini dengan meletakkan ini di Anda .bashrc:

bind '\C-f:unix-filename-rubout'

Sekarang gunakan Ctrl+f untuk melakukan apa yang Anda inginkan.

Tidak sekarang
sumber
1
terima kasih, itulah perintah yang berfungsi. apakah ada cara untuk menimpa perintah Cw? Jika saya mengubahnya C-w:..., perilaku default menghapus ke ruang berikutnya masih masuk. Pada tombol yang berbeda (seperti F) jika berfungsi dengan baik.
SkaveRat
Saya tidak berpikir ctrl-w dikelola oleh shell saja. Mungkin dikelola oleh tty juga. Apa pengaturan tty Anda ditunjukkan oleh stty -a? apakah Anda memiliki kontrol-w sebagai karakter default untuk werase? Jika Anda menghapus pengaturan itu dari tty, dengan comman stty werase undef, apakah bash berfungsi seperti yang diharapkan?
eppesuig
23

Untuk masalah khusus ini, Anda juga dapat menggunakan:

Alt + Backspace

$ cd /home/me/test/a_dir/    # Alt + Backspace
$ cd /home/me/test/          # Alt + Backspace
$ cd /home/me/               # ...

Referensi yang bagus: Petualangan dengan menghapus kata bash

fedorqui
sumber
2
Luar biasa! Sebagian besar jawaban lain menyarankan untuk membatalkan Ctrl+watau Ctrl + b atau semacamnya unix-filename-rubout, tetapi jauh lebih baik bahwa ada pengikatan bawaan: M-backspace (Alt + backspace atau Esc backspace)
Colin D Bennett
Tidak bekerja untuk saya
ethanjyx
@ethanjyx oh. Saya bekerja pada bash GNU. Apakah Anda juga memiliki rasa ini?
fedorqui
7

Dengan bash Anda bisa mendapatkan efek yang diinginkan, meletakkan yang berikut di file ~ / .bashrc Anda:

bind '"\C-w":backward-kill-word'

Tekan CTRL+Vdan kombinasi tombol Anda untuk melihat seperti apa emulator terminal Anda. Misalnya CTRL+bkspdapat diartikan berbeda pada terminal yang berbeda misalnya ^Hatau ^?. The ^karakter sama dengan CTRL.


sumber
Saya pikir saya tidak cukup spesifik dengan pertanyaan saya. Saya ingin memiliki /sebagai stop-character tambahan, bukan cara untuk mengikat perintah delete-word pada kunci lain. Saya mengedit pertanyaan saya
SkaveRat
Menggunakan kata backward-kill-binded ke \ Cw, itu akan menghapus mundur ke garis miring terakhir yang diberikan jika ada dalam sebuah kata dan itu akan menghapus kata-kata yang dibatasi oleh spasi putih. Ini bukan yang kamu inginkan?
Sistem saya menggunakan ^F- tetapi menggunakan "\^F"dalam skrip di atas tidak berfungsi
SkaveRat
1
The Ctrlkarakter ditulis \Cdalam naskah dan tidak \^.