Phím thoát vỏ Windows (xóa toàn bộ dòng) tương đương trong Bash


13

Trong dòng lệnh Windows (powershell và cmd), khi bạn nhấn Escphím trong khi trên một dòng, bất cứ điều gì bạn đã gõ tại dấu nhắc đều bị xóa.

Tôi thấy rằng nhấn Escphím tại bash prompt không làm gì cả. Nhấn Escvà sau đó backspacexóa một từ, nhưng điều này phải được thực hiện cho mỗi từ.

Tôi đang học Bash tăng dần và đôi khi gõ một cái gì đó ngu ngốc ở giữa dòng và cảm thấy rằng tốt hơn là nên gõ lại từ đầu. Để làm điều này, nhấn backspacelà cách duy nhất tôi tìm thấy cho đến bây giờ.

Bạn làm nghề gì?

Tôi biết về clearlệnh và Ctrl-Lphím tắt, nhưng tôi không nói về việc xóa toàn bộ thiết bị đầu cuối. Chỉ là dòng.


1
Một lúc trước, tôi đã đăng một danh sách các phím tắt bàn phím đọc hữu ích trên superuser. Bạn có thể thấy chúng hữu ích là tốt. (Readline là thư viện mà bash sử dụng để chỉnh sửa dòng.)
jw013

hey jw013, cảm ơn bạn đã chỉnh sửa tốt. :-)
Animesh

Câu trả lời:


15

Bạn muốn kill-whole-line, nhưng điều này không bị ràng buộc theo mặc định trong bash. backward-kill-line( CtrlX Backspace) và unix-line-discard( CtrlU) cả hai đều xóa từ điểm hiện tại đến đầu dòng, vì vậy chỉ cần đi đến cuối dòng và sử dụng một trong hai.


Bạn đúng, nó không bị ràng buộc với bất cứ điều gì. Tôi chỉ phát hiện ra rằng sử dụng bind -P. Tôi đoán Ctrl-Uvà sau đó Ctrl-Ylà lựa chọn duy nhất sau đó.
Animesh

Bạn sẽ thấy rằng một số các ràng buộc mặc định được lấy từ các chuỗi chính trong trình soạn thảo Emacs và các ràng buộc đó cũng xuất hiện ở nơi khác.
Blrfl

@Blrfl để mở rộng nhận xét của bạn, hầu hết các keybindings này đã được tóm tắt vào thư viện readline , một số lượng lớn các chương trình dòng lệnh sử dụng và đó là lý do tại sao tất cả chúng đều có các phím chỉnh sửa dòng tương tự.
jw013


6

Ctrl+ađi đến đầu của dòng và Ctrl+kxóa đến cuối dòng


Hãy thử ^Uđầu tiên, trong hầu hết các cài đặt chế độ chỉnh sửa dòng lệnh Emacs, nó đã xóa toàn bộ dòng. Ở những nơi nó chỉ xóa trái khỏi con trỏ (ví dụ như đường đọc GNU), nhấn ^Ksau đó.
mirabilos

3

Để mở rộng về câu trả lời Ignacio Vazquez-Abrams của một chút, bạn có thể nhận được (gần như) Windows như hành vi từ Escchủ chốt trong bash bằng cách gắn các kill-whole-lineđến Escvới lệnh sau đây

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

Nếu bạn thêm dòng vào ~/.inputrctệp của mình , ràng buộc sẽ tồn tại giữa các phiên.

Tuy nhiên, lưu ý rằng điều này rất không chuẩn, vì bash thực sự sử dụng Esckhóa làm khóa sửa đổi khác (như Alt hoặc Ctrl không liên tục). Nếu bạn nhìn vào danh sách các ràng buộc khóa hiện có (với bind -P), bạn có thể sẽ thấy một số lệnh bị ràng buộc với các tổ hợp phím bắt đầu bằng "\ e" (ví dụ:

"\eb": backward-word

trong đó thiết lập kết hợp Esc+ Bđể di chuyển con trỏ trở lại từ bắt đầu gần đây nhất - thay vì Ctrl+ , ngoại trừ việc bạn phải tiếp tục phát hành Esc( Btất nhiên, cũng như ) nếu bạn muốn thực hiện nhiều lần liên tiếp ).

Và điều đó giải thích tại sao tôi nói rằng hành vi bạn nhận được gần giống như Windows: khi bạn nhấn Esc, bash kiểm tra xem bạn có đang sử dụng nó kết hợp với khóa khác không; vì vậy, nếu bạn liên kết nó với kill-whole-line, có một chút chậm trễ giữa việc nhấn (hoặc đúng hơn là phát hành) Escvà bash xóa dòng cho bạn.

Tuy nhiên, nếu bạn không quan tâm đến bất kỳ điều gì trong số đó, và thà sống với sự chậm trễ hơn là kiềm chế bản thân với một tổ hợp phím khác, điều đó có thể được thực hiện.

(Lưu ý: phần lớn thông tin ở đây tôi nhận được là kết quả của việc đọc - và theo các liên kết trong - câu trả lời này .)


1
Điều này rất hữu ích, cảm ơn, và hoạt động ít nhiều như quảng cáo. Nhưng tôi đã thấy nó tạo ra một số hành vi gây phiền nhiễu khi các lệnh khác được thực thi "không hợp lệ", chẳng hạn như nhấn DEL khi ở cuối dòng: Điều này sẽ xóa dòng và thay thế bằng [19;hoặc một mã thoát tương tự. Cuối cùng, tôi thấy ánh xạ "\e\e"tới kill-whole-line(nghĩa là chạm vào Esc hai lần để xóa dòng) một sự thỏa hiệp tốt đẹp.
j_random_hacker

@j_random_hacker: Hừm, tôi thích điều đó. Tôi thường xuyên đánh Escmột vài lần, vì vậy tôi có thể thử nó. Tôi hiện có ràng buộc với Ctrl+ Delnhưng tôi không bao giờ nhớ điều đó.
Wilson F
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.