Keystroke untuk menghapus garis saat ini di prompt

1

Bagaimana cara menghapus garis saat ini? Saya menggunakan bash.

Saya tidak suka ctrl + c karena itu meninggalkan omong kosong yang dicetak di layar.

Jika kursor ada di ujung baris saya bisa menggunakan ctrl + kamu dan itu melakukan apa yang saya inginkan. Tetapi jika kursor adalah garis tengah, saya perlu menggunakan urutan seperti ctrl + e , ctrl + kamu (atau ctrl + Sebuah , ctrl + k ) untuk mendapatkan perilaku yang diinginkan.

Apakah ada satu penekanan tombol yang melakukannya di mana pun di baris kursor berada?

Saya juga bertanya-tanya apakah ini mungkin dalam vim (perilaku yang sama seperti 0D tetapi dengan satu penekanan tombol)

wim
sumber

Jawaban:

5

Di pesta Anda dapat mengikat kill-whole-line perintah untuk mis. CTRL-K

bind '"\C-k": kill-whole-line'

Ini melakukan persis apa yang Anda inginkan (dari man bash ):

kill-whole-line Bunuh semua karakter di baris saat ini, di mana pun titiknya.

Taruh ini untukmu ~/.bashrc jika Anda ingin perilaku ini terus-menerus.

Jika Anda ingin memberontak CTRL-U Anda harus memasukkan baris berikut di blog Anda ~/.inputrc

set bind-tty-special-chars off

Lihat laporan bug ini .


Di vim Anda dapat menentukan pintasan untuk 0D.

map <C-k> 0D
imap <C-k> <ESC>0Di

Anda dapat menguji ini dalam mode perintah ( : ) atau letakkan di ~/.vimrc atau ~/.vim/vimrc untuk membuatnya permanen. Pilih jalan pintas yang masuk akal untuk kebutuhan Anda, saya menggunakan CTRL+K agar konsisten dengan contoh bash. Itu imap baris digunakan dalam masukkan mode , jadi Anda bahkan tidak perlu ke mode perintah untuk membunuh baris saat ini, mis. ini menghemat dua penekanan tombol lainnya. (Saya tidak vim retak, jadi mungkin ada cara yang lebih baik untuk mencapai ini, tetapi tampaknya berhasil ...)

mpy
sumber
Terima kasih, kill-whole-line binding sempurna! Untuk vim, tentu saja saya tahu tentang dd tetapi melakukan sesuatu yang berbeda dengan 0D (yang terakhir meninggalkan baris kosong, yang sebelumnya membunuh baris baru juga).
wim
@wim. Buruk saya, saya meningkatkan bagian vim.
mpy
1
Hanya pertanyaan singkat, jika saya katakan bind C-k:kill-whole-line di .bashrc dan sumber .bashrc berfungsi, tetapi ketika saya mencoba menggunakan C-u bukan itu, keystroke ctrl + u tampaknya mempertahankan perilaku lama. Ada yang tahu kenapa?
wim
@ wim: Saya bingung - saya bisa mereproduksi masalah dengan C-u, tetapi belum ada penjelasan. Bahkan tidak mungkin untuk melepas ikatan fungsi ini dengan bind -u unix-line-discard...
mpy
@wim: Misteri terpecahkan ... CTRL-U adalah karakter khusus. Lihat jawaban saya yang diperbarui sekali lagi untuk menyingkirkan pengikatan default!
mpy
2

Saya dapat memikirkan dua penekanan tombol (dd). Pertama Atur mode bash ke vi (yang memungkinkan pengeditan perintah vi dengan baris perintah bash):

set -o vi

Kemudian untuk menghapus jenis baris saat ini dd.

suspectus
sumber