Trong bash, làm thế nào để xóa đầu vào hiện tại?


172

Giả sử trong bash bạn bắt đầu viết một lệnh như:

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

và sau đó nhận ra rằng bạn không muốn thực hiện điều này sau khi tất cả. Có cách nào để xóa đầu vào bằng một hoặc hai lần nhấn phím không?

Những gì tôi đã làm gần đây là chuẩn bị tiếng vang và kèm theo đầu vào trong dấu ngoặc kép (Ctrl + A echo ",, Ctrl + E, ") sau đó nhấn enter. Có cách nào nhanh hơn không?


Hoặc giả sử bạn dán một lệnh và nhận ra đó là một lệnh sai. Backspace trở nên thực sự cũ sau khoảng 20 ký tự!
bgStack15

<kbd> Ctrl </ kbd> - <kbd> C </ kbd>, nếu bạn muốn giữ lịch sử tham khảo stackoverflow.com/a/9679852/6521116
Kris Roofe

Câu trả lời:


286
  1. Nhấn Ctrl- Uđể xóa mọi thứ trước con trỏ. Lệnh đã xóa sẽ được lưu vào bộ đệm. Nhấn Ctrl- Yđể dán lệnh đã xóa.

    (Tùy chọn: Bấm Endhoặc Ctrl- Eđể nhảy đến cuối đầu vào.)

  2. Hoặc, nhấn Ctrl- Cđể hủy bỏ những gì bạn đang gõ.


28
Có một cảnh báo: Ctrl-C sẽ tắt dấu nhắc hiện tại, bắt đầu một dấu nhắc mới và đặt mã trả về là 1.
user716468

14
Đừng quen với điều đó, hãy sử dụng Ctrl-U. Ctrl-C không tệ trong bash, nhưng nếu bạn có ví dụ như lời nhắc của máy khách mysql, Ctrl-C sẽ ngắt kết nối với máy chủ thực sự gây phiền nhiễu.
Christian

1
Lưu ý rằng trên nhiều hệ thống, cũng có một ký tự 'giết' thiết bị đầu cuối giết chết đầu vào cho đến nay. Thông thường, đó là control-X. Bạn có thể kiểm tra với stty -a. Và điều đó sẽ làm việc với bất kỳ chương trình nào không tích cực sửa đổi các điều khiển đầu cuối.
Jonathan Leffler

Ctrl-A theo sau là Ctrl-K cũng hoạt động. Văn bản 'bị giết' được lưu trữ và bạn có thể dán nó bằng cách sử dụng Ctrl-Y. Các tổ hợp phím này trên thực tế đến từ thư viện dòng đọc: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html .. vì vậy bạn có thể tìm thấy chúng trong bất kỳ công cụ nào mà giao diện người dùng sử dụng thư viện (Trên thực tế là Emacs, bash, Vân vân..). Bạn có thể tùy chỉnh hành vi của nó bằng cách chỉnh sửa tệp .inputrc (hãy xem liên kết ở trên để biết thêm chi tiết).
rkachach

93

Hãy thử Ctrl+ U. Điều đó xóa dòng đầu vào.


7
Cảm ơn, tôi gần như chấp nhận đây là câu trả lời. Nhưng tôi thấy nó chỉ xóa đầu vào trước con trỏ. Trong một số trường hợp, tôi đang chỉnh sửa lệnh, vì vậy tôi thà nhớ Ctrl + C thay vì Ctrl + U chỉ đơn giản là "loại bỏ đầu vào hiện tại".
dùng85509


21

Ctrl- U, Ctrl- Kcũng lừa như vậy.

Ctrl- Uxóa mọi thứ từ đầu dòng đến con trỏ, Ctrl- Kxóa mọi thứ từ con trỏ đến cuối dòng. (Đôi khi chỉ hữu ích khi sử dụng một trong số chúng.)


13

Có hai lựa chọn để làm điều này

ctrl+ c- điều này xóa toàn bộ dòng, bất kể con trỏ ở đâu.

ctrl+ u- điều này xóa dòng từ vị trí của con trỏ cho đến khi bắt đầu.


2
"Hãy xem xét rằng việc sử dụng Cu (hoặc Ce và sau đó là Cu) sẽ lưu trữ những gì bạn xóa trong bộ đệm để sau đó bạn có thể dán nó sau khi sử dụng Cy." Đánh dấu một lệnh đơn giản hơn là ctrl + _. stackoverflow.com/questions/1056440/ được trả lời bởi john kug - mới bắt đầu stackoverflow không có đủ điểm để thêm nhận xét cho bạn trả lời.
vks

9

Một phím tắt tốt đẹp là nhấn Esc#. Nó sẽ thêm vào một #ký tự (do đó làm cho dòng nhận xét) và sau đó nhấn enter. Nếu sau đó bạn quyết định rằng bạn vẫn cần lệnh, bạn vẫn có nó trong lịch sử của mình :)


3
Trong hầu hết các thiết bị đầu cuối, điều này cũng giống như Alt + #, điều này làm cho nó trở thành một tổ hợp phím (hợp âm).
Dolda2000

Một giải pháp đơn giản nhưng thông minh và tôi nghĩ rằng đây là cách hủy bỏ lệnh thân thiện hơn với người dùng. Chính xác những gì tôi đang tìm kiếm :)
Cas

9

Nhấn dấu Esccộng Backspacetrong bash sẽ xóa mọi thứ theo vị trí của con trỏ.

(Trong Cygwin, điều này sẽ xóa đầu vào cho từ tiếp theo. Các từ được phân tách bằng dấu cách, dấu gạch dưới, ...)


3

Hãy xem xét rằng việc sử dụng Ctrl- U(hoặc Ctrl- Evà sau đó Ctrl- U) sẽ lưu trữ những gì bạn xóa trong bộ đệm để sau đó bạn có thể dán nó sau khi sử dụng Ctrl- Y.


3

Nếu bạn đang sử dụng Bash ở chế độ vi (đặt với set -o vi), sau đó nhấn Escđể chuyển sang chế độ thông thường của vi và nhập ddđể xóa dòng hiện tại!


3

Đây là một bản mở rộng của câu trả lời của knittl lưu trữ dòng trong lịch sử giao diện điều khiển bằng cách thêm tiền tố vào hàm băm. Khắc phục nhược điểm của bảng tạm, chẳng hạn như ghi đè ngẫu nhiên hoặc không thể xem dòng cắt để tham khảo.

Dòng bình luận và trả lại lời nhắc mới

Sử dụng một trong hai phím tắt:

  • Esc,#
  • Alt+#

Một ký tự băm #sẽ được thêm vào dòng, do đó biến toàn bộ dòng thành một nhận xét. Nó cũng sẽ trả về một dấu nhắc mới, như thể người dùng đã nhấn enter. ví dụ

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

Lấy dòng bình luận

Để khôi phục dòng cũ từ lịch sử bảng điều khiển, hãy sử dụng một trong các phím tắt sau:

  • Up
  • Ctrl+p

Lặp lại phím tắt cho đến khi dòng mong muốn xuất hiện.


Loại bỏ tiền tố Hash nhanh

Để xóa băm của dòng # tiền tố có một vài tùy chọn khác nhau có sẵn:

Xóa ký tự đầu tiên và thực hiện lệnh ngay lập tức:

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

Di chuyển con trỏ để bắt đầu và xóa ký tự đầu tiên, mà không thực hiện lệnh:

  • Home, Delete
  • Ctrl+ a, Ctrl+d

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.