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/

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


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.


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


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.


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 \^.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.