Tombol Escape shell Windows (hapus seluruh baris) setara di Bash


13

Di baris perintah Windows (PowerShell dan CMD), ketika Anda menekan Esctombol saat berada di jalur, apa pun yang Anda ketikkan pada prompt dihapus.

Saya menemukan bahwa menekan Esctombol di bash prompt tidak melakukan apa-apa. Menekan Escdan kemudian backspacemenghapus kata, tetapi ini harus dilakukan untuk setiap kata.

Saya belajar Bash secara bertahap dan terkadang mengetik sesuatu yang bodoh di tengah baris dan merasa bahwa lebih baik mengetik dari awal lagi. Untuk melakukan ini, menekan backspaceadalah satu-satunya cara yang saya temukan sampai sekarang.

Apa yang kamu kerjakan?

Saya mengetahui clearperintah dan Ctrl-Ljalan pintas, tetapi saya tidak berbicara tentang membersihkan seluruh terminal. Hanya garis.


1
Beberapa waktu yang lalu saya posted daftar cara pintas keyboard readline berguna pada superuser. Anda mungkin menemukan mereka berguna juga. (Readline adalah perpustakaan yang digunakan bash untuk mengedit baris.)
jw013

hei jw013, terima kasih atas hasil edit yang bagus. :-)
Animesh

Jawaban:


15

Anda ingin kill-whole-line, tetapi ini tidak terikat secara default di bash. backward-kill-line( CtrlX Backspace) dan unix-line-discard( CtrlU) keduanya menghapus dari titik saat ini ke awal baris, jadi pergi saja ke akhir baris dan gunakan keduanya.


Anda benar, tidak terikat apa pun. Saya baru tahu menggunakan itu bind -P. Saya kira Ctrl-Udan kemudian Ctrl-Yadalah satu-satunya pilihan.
Animesh

Anda akan menemukan bahwa sejumlah binding standar berasal dari urutan kunci dalam editor Emacs dan bahwa binding tersebut juga muncul di tempat lain.
Blrfl

@ Bllfl untuk memperluas komentar Anda, sebagian besar dari keybindings ini telah diabstraksikan ke dalam perpustakaan readline , yang digunakan oleh sejumlah besar program commandline dan itulah sebabnya mereka semua memiliki kunci pengeditan baris yang serupa.
jw013


6

Ctrl+apergi ke awal baris dan Ctrl+kmenghapus ke akhir baris


Coba ^Udulu, di sebagian besar implementasi mode pengeditan baris perintah Emacs sudah menghapus baris penuh. Di tempat yang hanya dihapusnya yang tersisa dari kursor (GNU readline, misalnya), tekan ^Ksesudahnya.
mirabilos

3

Untuk memperluas jawaban Ignacio Vazquez-Abrams kecil, Anda bisa mendapatkan (hampir) Windows seperti perilaku dari Esckunci di bash dengan mengikat kill-whole-lineuntuk Escdengan perintah berikut

bind '"\e":kill-whole-line'

Jika Anda menambahkan baris ke ~/.inputrcfile Anda , ikatan akan tetap ada di antara sesi.

Perhatikan, bagaimanapun, bahwa ini sangat non-standar, karena bash benar-benar menggunakan Esckunci tersebut sebagai kunci modifikasi lain (seperti Alt atau Ctrl yang tidak persisten). Jika Anda melihat daftar binding kunci yang ada (dengan bind -P), Anda mungkin akan melihat beberapa perintah terikat pada kombinasi kunci yang dimulai dengan "\ e" (mis.

"\eb": backward-word

yang mengatur kombinasi Esc+ Buntuk memindahkan kursor kembali ke awal kata yang paling baru - agak seperti Ctrl+ , kecuali bahwa Anda harus terus melepaskan Esc(dan B, tentu saja) jika Anda ingin melakukannya lebih dari satu kali berturut-turut ).

Dan itu menjelaskan mengapa saya mengatakan bahwa perilaku yang Anda dapatkan hampir seperti Windows: ketika Anda menekan Esc, periksa bash untuk melihat apakah Anda menggunakannya dalam kombinasi dengan tombol lain; jadi, jika Anda mengikatnya kill-whole-line, ada sedikit penundaan antara menekan (atau lebih tepatnya, melepaskan) Escdan bash membersihkan garis untuk Anda.

Namun, jika Anda tidak mempedulikan semua itu, dan lebih suka hidup dengan penundaan daripada melatih diri Anda sendiri dengan penekanan tombol yang berbeda, itu bisa dilakukan.

(Catatan: banyak informasi di sini yang saya dapatkan sebagai hasil dari membaca - dan mengikuti tautan di - jawaban ini .)


1
Ini sangat membantu, terima kasih, dan berfungsi lebih atau kurang seperti yang diiklankan. Tapi saya menemukan itu menghasilkan beberapa perilaku menjengkelkan ketika perintah lain dieksekusi "tidak valid", seperti menekan DEL ketika di akhir baris: Ini akan menghapus baris dan menggantinya dengan [19;atau kode melarikan diri yang serupa. Pada akhirnya saya menemukan pemetaan "\e\e"ke kill-whole-line(yaitu, ketuk Esc dua kali untuk menghapus garis) kompromi yang bagus.
j_random_hacker

@ j_random_hacker: Hm, saya suka itu. Saya sering memukul Escbeberapa kali, jadi saya bisa mencobanya. Saya saat ini memilikinya terikat ke Ctrl+ Deltetapi saya tidak pernah ingat itu.
Wilson F
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.