Làm cách nào để xóa / xóa dòng hiện tại trong thiết bị đầu cuối?


795

Nếu tôi đang sử dụng thiết bị đầu cuối và gõ một dòng văn bản cho một lệnh, thì có một phím nóng hoặc bất kỳ cách nào để xóa / xóa dòng đó không?

Ví dụ: nếu dòng / lệnh hiện tại của tôi là một cái gì đó thực sự dài như:

> git log --graph --all --blah..uh oh i want to cancel and clear this line <cursor is here now>

Có một phím nóng hoặc lệnh để đi từ trên đến:

>

?

Thông thường tôi sẽ nhấn phím và nếu dòng hiện tại của tôi là một dòng hoàn toàn mới trong lịch sử, điều đó sẽ xóa nó. Nhưng nếu tôi duyệt qua lịch sử lệnh của mình thông qua phím và bắt đầu chỉnh sửa hoặc sử dụng các lệnh đó, sẽ chỉ thay đổi lời nhắc thành lệnh mới nhất tiếp theo trong lịch sử, vì vậy nó không hoạt động ở đây trừ khi tôi nhấn nhiều lần.


6
Các phím tắt để di chuyển nhanh hơn trong dòng lệnh Bash Trang này mang tính minh họa hơn và tôi giải thích rõ hơn
Gab


Câu trả lời:


1493

Bạn có thể sử dụng Ctrl+ Uđể xóa cho đến đầu.

Bạn có thể sử dụng Ctrl+ Wđể xóa chỉ một từ.

Bạn cũng có thể sử dụng Ctrl+ Cđể hủy bỏ.

Nếu bạn muốn giữ lịch sử, bạn có thể sử dụng Alt+ Shift+ #để bình luận.


Chế độ chỉnh sửa Bash Emacs Cheat Sheet


231
Dòng bị xóa bởi Ctrl-U cũng có thể được gọi lại bằng Ctrl-Y.
keks

65
Có sao không Thật tuyệt, cảm ơn keks & kev, ⌃ + U bị xóa tất cả trước Con trỏ, ⌃ + K bị xóa tất cả sau Con trỏ, ⌃ + A là đi đến đầu dòng. Vì vậy, về mặt kỹ thuật ⌃ + C là giải pháp tốt nhất cho Câu hỏi
Binary

3
Alt-Shift- # không hoạt động? nghĩ người khác làm. Alt-Shift- # in một ký tự> trên thiết bị đầu cuối
tgkprog

49
Nâng cao cho việc dạy tôi <kbd>...</kbd>thẻ để hiển thị các khóa trong SO.
Samveen

11
@ LưuViênPhúc ESClà khóa bổ trợ riêng trong bash. Nó được sử dụng cho những việc như hủy điều hướng lịch sử ( CTRL+ r) hoặc hoán đổi hai từ cuối cùng phía sau con trỏ ( ESC+ t).
noobish

578

Chỉ cần tóm tắt tất cả các câu trả lời:

  • Dọn dẹp dòng: Bạn có thể sử dụng Ctrl+ Uđể xóa từ đầu.
  • Dọn dẹp dòng: Ctrl+ E Ctrl+ Uđể xóa dòng hiện tại trong thiết bị đầu cuối
  • Dọn dẹp dòng: Ctrl+ A Ctrl+ Kđể xóa dòng hiện tại trong thiết bị đầu cuối
  • Hủy lệnh / dòng hiện tại: Ctrl+ C.
  • Nhớ lại lệnh đã xóa: Ctrl+ Y(sau đó Alt+ Y)
  • Đi đến đầu dòng: Ctrl+A
  • Đi đến cuối dòng: Ctrl+E
  • Xóa các từ chuyển tiếp chẳng hạn, nếu bạn ở giữa lệnh: Ctrl+K
  • Xóa các ký tự bên trái, cho đến khi bắt đầu từ: Ctrl+W
  • Để xóa toàn bộ dấu nhắc lệnh của bạn: Ctrl+L
  • Chuyển đổi giữa điểm bắt đầu của dòng và vị trí con trỏ hiện tại: Ctrl+XX

6
lưu ý ctrl-k xóa mọi thứ giữa con trỏ và cuối dòng.
Peter Berg

6
Xóa từ tiếp theo:Alt + D
cnlevy

1
Alt+ D không hoạt động, đó là lý do tại sao tôi không bao gồm nó :(
J4cK

1
CTRL + Lxóa màn hình nhưng giữ lại những gì đã gõ trong dòng lệnh hiện tại.
Aziraphale

1
Ctrl + Alt + >di chuyển đến cuối lịch sử đầu vào hoàn hảo khi bạn muốn hủy tìm kiếm lịch sử.
astasiak

165

Tôi có danh sách phím tắt đầy đủ:

  1. Ctrl+ a Di chuyển con trỏ đến đầu dòng
  2. Ctrl+ e Di chuyển con trỏ đến cuối dòng
  3. Ctrl+ b Di chuyển trở lại một nhân vật
  4. Alt+ b Di chuyển trở lại một từ
  5. Ctrl+ f Di chuyển về phía trước một nhân vật
  6. Alt+ f Di chuyển về phía trước một từ
  7. Ctrl+ d Xóa ký tự hiện tại
  8. Ctrl+ w Cắt từ cuối cùng
  9. Ctrl+ k Cắt mọi thứ sau con trỏ
  10. Alt+ d Cắt từ sau con trỏ
  11. Alt+ w Cắt từ trước con trỏ
  12. Ctrl+ y Dán lệnh đã xóa cuối cùng
  13. Ctrl+ _ Hoàn tác
  14. Ctrl+ u Cắt mọi thứ trước con trỏ
  15. Ctrl+ xxChuyển đổi giữa vị trí đầu tiên và hiện tại
  16. Ctrl+ l Xóa thiết bị đầu cuối
  17. Ctrl+ c Hủy lệnh
  18. Ctrl+ r Lệnh tìm kiếm trong lịch sử - nhập cụm từ tìm kiếm
  19. Ctrl+ j Kết thúc tìm kiếm tại mục lịch sử hiện tại
  20. Ctrl+ g Hủy tìm kiếm và khôi phục dòng gốc
  21. Ctrl+ n Lệnh tiếp theo từ Lịch sử
  22. Ctrl+ p lệnh trước từ Lịch sử

5
Xin lỗi, nhưng tôi đã cung cấp tất cả các phím tắt hữu ích, trong đó 7,8,9,10,11,14,16,17 là các phím cắt ngắn xóa / xóa mà chúng tôi có thể sử dụng theo yêu cầu.
tharunkumar

2
Cần phải đề cập rằng CTRL+ L(16.) bảo tồn nội dung của dòng lệnh hiện tại.
Aziraphale

trên windows có vẻ như bạn cần sử dụng Ctrl + Shift + A để bắt đầu dòng
Gandalf458

3
Nó bị thiếu Ctrl+ h: xóa ký tự trước con trỏ
peflorencio

22

Ctrl+ A, Ctrl+ Kđể xóa dòng hiện tại trong thiết bị đầu cuối. Sau đó, bạn có thể gọi lại bằng Ctrl+ Ynếu bạn cần.


16

hoặc nếu bạn sử dụng chế độ vi, hãy nhấn Esctheo saucc

để lấy lại những gì bạn vừa xóa, Escvà sau đó p:)


5
Bạn có thể kích hoạt chế độ vi bằng cách echo 'set editing-mode vi' >> ~/.inputrc. Cũng hoạt động ở những nơi như lời nhắc của trình thông dịch python và một số máy khách SQL
dwurf

11

Tôi không chắc bạn có thích nó không nhưng tôi sử dụng Ctrl+ A(để bắt đầu dòng) và Ctrl+ K(để xóa dòng) Tôi đã quen thuộc với các lệnh này từ emacs và vô tình tìm ra chúng.



6
  • Ctrl+ u: di chuyển đến đầu dòng của bạn vào bộ đệm vòng
  • Ctrl+ k: di chuyển đến cuối dòng của bạn vào bộ đệm vòng
  • Ctrl+ w: di chuyển các ký tự và (nhiều) từ còn lại từ con trỏ của bạn sang bộ đệm vòng

  • Ctrl+ y: chèn mục cuối cùng từ bộ đệm vòng của bạn và sau đó bạn có thể sử dụng Alt+ yđể xoay qua bộ đệm vòng. Nhấn nhiều lần để tiếp tục nhập "trước" trong bộ đệm vòng.


4

CTRL+ Rvà bắt đầu nhập để tìm kiếm các lệnh trước đó trong lịch sử. Sẽ hiển thị đầy đủ dòng.
CTRL+ Rlại chu kỳ.



2

Thêm vào danh sách:

Trong chế độ Emacs, nhấn Esc, theo sau R, sẽ xóa toàn bộ dòng.

Tôi không biết tại sao, chỉ tình cờ tìm thấy nó. Có thể nó không được sử dụng để xóa dòng nhưng cũng có tác dụng tương tự. Nếu ai đó biết, xin vui lòng cho tôi biết, cảm ơn :)

Hoạt động ở Bash, nhưng sẽ không hoạt động trong Fish.


1
Đó là revert-linelệnh readline: "Hoàn tác tất cả các thay đổi được thực hiện cho dòng này". Theo mặc định, nó bị ràng buộc với M-r(Meta-R), có thể là cả Alt-R hoặc Esc R. Điều này có nghĩa là nó không thực sự xóa dòng, chỉ khi nó trống để bắt đầu; Nếu bạn cuộn lại trong lịch sử lệnh của mình và thay đổi một lệnh, sau đó phát hành revert-line, nó sẽ thay đổi trở lại lệnh ban đầu và không xóa dòng.
Benjamin W.

2

Để xóa toàn bộ dòng cho dù con trỏ ở đâu, bạn có thể sử dụng kill-whole-linelệnh, nhưng nó không bị ràng buộc theo mặc định. Nó có thể được liên kết đến, ví dụ, Ctrl+ Alt+ Kbằng cách chèn

"\e\C-k": kill-whole-line

vào tập tin initline của bạn (thông thường ~/.inputrc).

Nhận xét khác nhau:

  • Để tránh vô tình gán lại một chuỗi khóa đã được sử dụng cho mục đích khác, bạn có thể kiểm tra tất cả các ràng buộc của mình với bind -P. Kiểm tra các ràng buộc được đề xuất với

    bind -P | grep '\\e\\C-k'
  • Tên tệp initline được lấy từ biến shell INPUTRC. Nếu nó không được đặt, mặc định là ~/.inputrchoặc (nếu điều đó không tồn tại) /etc/inputrc. Lưu ý rằng nếu bạn có ~/.inputrc, /etc/inputrcsẽ bị bỏ qua.
  • Để tải lại tệp initline của bạn, bạn có thể sử dụng Ctrl+ X Ctrl+ R.
  • Liên kết đến các phần hướng dẫn liên quan:

2

Để làm sạch toàn bộ dòng (2 cách khác nhau):

  • Home, Ctrl+K
  • End, Ctrl+U

0

Alt+ #nhận xét ra dòng hiện tại. Nó sẽ có sẵn trong lịch sử nếu cần thiết.

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.