Dalam bash, bagaimana cara menghapus input saat ini?

172

Misalkan dalam bash Anda mulai menulis perintah seperti:

$ rm -rf /foo/bar/really/long/path/here

dan kemudian sadari bahwa Anda tidak ingin melakukan ini. Apakah ada cara untuk menghapus input dengan satu atau dua penekanan tombol?

Apa yang saya lakukan akhir-akhir ini adalah menambahkan gema dan menyertakan input dalam tanda kutip (Ctrl + A echo ",, Ctrl + E, ") lalu menekan enter. Apakah ada cara yang lebih cepat?

pengguna85509
sumber
Atau, misalkan Anda menempelkan perintah, dan sadari itu adalah kesalahan satu-liner. Backspace menjadi sangat tua setelah sekitar 20 karakter!
bgStack15
<kbd> Ctrl </kbd> - <kbd> C </kbd>, jika Anda ingin menyimpan riwayat, lihat stackoverflow.com/a/9679852/6521116
Kris Roofe

Jawaban:

286
  1. Tekan Ctrl- Uuntuk menghapus semuanya sebelum kursor. Perintah yang dihapus akan disimpan ke dalam buffer. Tekan Ctrl- Yuntuk menempelkan perintah yang dihapus.

    (Opsional: Tekan Endatau Ctrl- Euntuk melompat ke ujung input terlebih dahulu.)

  2. Atau, tekan Ctrl- Cuntuk membatalkan apa yang Anda ketikkan.

John Kugelman
sumber
28
Ada peringatan: Ctrl-C akan mematikan prompt saat ini, memulai prompt baru, dan mengatur kode kembali ke 1.
user716468
14
Jangan terbiasa dengan hal itu, gunakan Ctrl-U. Ctrl-C tidak seburuk itu di bash, tetapi jika Anda memiliki mis mysql client prompt, Ctrl-C akan memutuskan koneksi dari server yang benar-benar menjengkelkan.
Christian
1
Perhatikan bahwa pada banyak sistem, ada juga karakter terminal 'kill' yang membunuh input sejauh ini. Seringkali, itu adalah kontrol-X. Anda bisa memeriksanya stty -a. Dan itu akan bekerja dengan program apa pun yang tidak secara aktif memodifikasi kontrol terminal.
Jonathan Leffler
Ctrl-A diikuti oleh Ctrl-K juga berfungsi. Teks 'terbunuh' disimpan dan Anda dapat menempelkannya dengan menggunakan Ctrl-Y. Penekanan tombol ini sebenarnya berasal dari pustaka baris baca: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html .. sehingga Anda dapat menemukannya di alat apa pun yang antarmuka pengguna menggunakan pustaka (Sebenarnya Emacs, bash, dll ..). Anda dapat menyesuaikan perilakunya dengan mengedit file .inputrc (lihat tautan di atas untuk detail lebih lanjut).
rkachach
93

Coba Ctrl+ U. Itu membersihkan jalur input.

Gbarry
sumber
7
Terima kasih, saya hampir menerima ini sebagai jawabannya. Tapi saya menemukan itu hanya membersihkan input sebelum kursor. Dalam beberapa kasus saya sedang mengedit perintah, jadi saya lebih suka mengingat Ctrl + C daripada Ctrl + U hanya sebagai "membuang input saat ini".
user85509
21

Ctrl- U, Ctrl- Kmelakukan triknya juga.

Ctrl- Umenghapus semuanya dari awal baris hingga kursor, Ctrl- Kmenghapus semuanya dari kursor hingga akhir baris. (Terkadang berguna hanya menggunakan salah satunya saja.)

rur
sumber
13

Ada dua opsi untuk melakukan ini

ctrl+ c- ini menghapus seluruh baris, di mana pun kursor berada.

ctrl+ u- ini menghapus garis dari posisi kursor hingga awal.

vks
sumber
2
"Pertimbangkan bahwa menggunakan Cu (atau Ce dan kemudian Cu) akan menyimpan apa yang Anda hapus dalam buffer sehingga Anda dapat menempelnya nanti menggunakan Cy." Markisisme perintah tunggal yang lebih sederhana adalah ctrl + _. stackoverflow.com/questions/1056440/... dijawab oleh john kug - baru mulai stackoverflow tidak memiliki cukup poin untuk menambahkan komentar pada jawaban Anda.
vks
9

Jalan pintas yang bagus adalah menekan Esc#. Ini akan menambahkan #karakter (sehingga membuat baris menjadi komentar) dan kemudian tekan enter. Jika Anda kemudian memutuskan bahwa Anda masih membutuhkan perintah, Anda masih memilikinya di riwayat Anda :)

rajutan
sumber
3
Di sebagian besar terminal, ini juga sama dengan Alt + #, yang menjadikannya satu keystroke (chorded).
Dolda2000
Solusi sederhana namun cerdas dan saya pikir ini adalah cara yang lebih ramah pengguna untuk membatalkan perintah. Persis apa yang saya cari :)
Cas
9

Menekan Escplus Backspacedalam bash akan menghapus semuanya hingga ke posisi kursor.

(Dalam Cygwin, ini akan menghapus input hingga kata berikutnya. Kata-kata dipisahkan oleh spasi, garis bawah, ...)

Nippey
sumber
3

Pertimbangkan bahwa menggunakan Ctrl- U(atau Ctrl- Edan kemudian Ctrl- U) akan menyimpan apa yang Anda hapus dalam buffer sehingga Anda dapat menempelnya nanti menggunakan Ctrl- Y.

goncalotoma
sumber
3

Jika Anda menggunakan Bash dalam mode vi (atur dengan set -o vi), lalu tekan Escuntuk beralih ke mode normal vi, dan ketik dduntuk menghapus baris saat ini!

Helmyano
sumber
3

Ini adalah perluasan dari jawaban knittl yang menyimpan baris dalam sejarah konsol dengan awalan dengan hash. Mengatasi kekurangan clipboard, seperti menimpa yang tidak disengaja atau tidak dapat melihat garis potong untuk referensi.

Baris Komentar & Kembalikan Prompt Baru

Gunakan salah satu cara pintas tombol:

  • Esc,#
  • Alt+#

Karakter hash #akan ditambahkan ke baris, sehingga mengubah seluruh baris menjadi komentar. Ini juga akan mengembalikan prompt baru, seolah-olah masuk ditekan oleh pengguna. misalnya

$ #rm -rf /foo/bar/really/long/path/here
$

Ambil Baris yang Dikomentari

Untuk memulihkan garis lama dari riwayat konsol gunakan salah satu cara pintas berikut:

  • Up
  • Ctrl+p

Ulangi pintasan tombol sampai garis yang diinginkan muncul.


Penghapusan Awalan Cepat Hash

Untuk menghapus #awalan hash baris ada beberapa opsi yang tersedia:

Hapus karakter pertama dan segera jalankan perintah:

  • Esc, 1, Esc,#
  • Alt+ -, Alt+#

Pindahkan kursor untuk memulai dan menghapus karakter pertama, tanpa menjalankan perintah:

  • Home, Delete
  • Ctrl+ a, Ctrl+d
Cas
sumber
2

Untuk menghapus baris saat ini, coba:

Ctrl- X, Ctrl-U

Sebagai alternatif, Anda dapat menggunakan:

Esc-D

yang membutuhkan ~ / .inputrc:

"\ed": kill-whole-line 

lihat: http://codesnippets.joyent.com/posts/show/1690

goncalotoma
sumber
Jika Anda ingin hanya tombol escape untuk menghapus seluruh baris tambahkan "\e\e": kill-whole-line(harus tekan dua kali tombol esc)
binaryfunt