Bash: hapus kata di depan kursor

76

Pertimbangkan baris perintah bash berikut, di mana ^ menunjukkan lokasi kursor:

svn commit -m very/long/path/to/some/file "[bug 123456] Fix the pixel issue"
              ^

Saya ingin mengkomit file yang berbeda dengan pesan yang sama. Bagaimana saya bisa menghapus kata saat ini, dari lokasi kursor ke ruang berikutnya? Apakah ada juga cara pintas untuk penghapusan mundur, membentuk kursor ke ruang pertama mundur?

Perbarui: ctrl + whapus mundur, tetapi pintasan mana yang menghapus satu kata ke depan?

Adam Matan
sumber
2
Ctrl uadalah opsi untuk menghapus dari lokasi kursor ke awal ...
gila tentang rapi
23
Coba alt + d, itu mungkin berguna, ketika mode pengeditan emacs diatur.
@Mik, bagaimana Anda mengaktifkan mode emacs?
Adam Matan
@AdamMatan set -o emacsmengaktifkannya, tetapi biasanya default; jika tidak, Anda dapat meletakkan baris itu di .bashrcatau .bash_aliases, lalu sumber file atau memuat ulang terminal. Namun, maka pintasan yang Anda gunakan dalam mode vi tidak akan tersedia, meskipun yang seperti ctrl + c akan karena mereka bukan pintas Bash.

Jawaban:

56

Saya menjawab pertanyaan serupa di unix.stackexchange.com :

Bash memiliki perintah readline yang tidak terikat secara default. Anda dapat menemukannya di referensi: http://www.gnu.org/software/bash/manual/html_node/Bindable-Readline-Commands.html#Bindable-Readline-Commands

Perintah yang Anda cari disebut "shell-backward-kill-word". Anda harus memilih pintasan terlebih dahulu. Mari kita gunakan Crtl + p, karena itu "perintah sebelumnya" - sama seperti panah atas.

bind '"\C-p": shell-backward-kill-word'

Satu-satunya perbedaan adalah Anda harus menggunakan perintah "shell-kill-word", karena Anda ingin menghapus maju.

Ada juga perintah "kill-word" dengan Meta+ dshortcut (coba Esc+ djika Anda tidak memiliki kunci Meta). Ini akan menghapus hanya satu bagian jalur sekaligus.

Nykakin
sumber
31
Alt-d bekerja untuk saya
ricab
8
Secara umum, di dunia keyboard di mana Meta tidak ada, Alt = Meta.
Nate CK
Saya dunia di mana Anda memiliki banyak keyboard yang berbeda, fakta yang nyaman dan cukup berguna adalah bahwa Esc sebagai awalan juga bertindak sebagai Meta.
tripleee
1
Singkatnya, tambahkan misalnya ini ke file $ HOME / .inputrc Anda:, "\ew": shell-kill-word yang akan membuat Alt-w meneruskan menghapus kata, seperti CTRL-w mundur menghapus kata (dan tidak seperti Alt-d yang akan meneruskan menghapus tetapi berhenti pada misalnya a / atau - dan karakter lainnya)
user964970
7

Diuji kedua esc+ ddan alt/ opt+ dpada OSX Mavericks dan mereka bekerja di sana juga.

visyoual
sumber
12
Option + dmemberi saya ∂ di OSX
Ivan Balashov
4
-1 OSX bukan Ubuntu. Jangan ragu untuk menambahkan komentar, tetapi ini bukan jawaban.
wjandrea
Anda harus terlebih dahulu mengaktifkan kotak centang "gunakan opsi sebagai kunci meta" di preferensi terminal (profil -> tab keyboard -> kotak centang)
nils petersohn
control + ddi mac Sierra
mfink
2
@IvanBalashov jika Anda menggunakan iterm atur let opt ​​key Anda sebagai esc +. Di bawah Profil> kunci
tessie