Bash: xóa từ con trỏ đến cuối dòng bằng phím tắt


91

Hãy xem xét dấu nhắc bash sau, trong đó ^biểu thị vị trí nhắc:

$ git commit -am "[bug 123456] Do this and that with the bug"
                               ^

Giả sử rằng tôi muốn cam kết một lần nữa với cùng một lỗi, với một thông báo cam kết khác. Có cách nào để xóa văn bản từ vị trí con trỏ cho đến cuối dòng không?

Câu trả lời:


145

Sử dụng Ctrl+ Kđể xóa từ con trỏ đến cuối dòng.

Sử dụng Ctrl+ Uđể xóa từ con trỏ đến đầu dòng.


Sự kết hợp quan trọng để đặt là gì?
ShooShoSha

@ShooShoSha, Hãy thử Shift + Chèn
user128285

Ý nghĩa của K và U là gì, tôi không thể nhớ lại vào tuần tới nếu tôi không biết ý nghĩa, làm thế nào để nhớ chúng?
workplaylifecycle

2
@hylepo Dunno nhưng khả năng ghi nhớ của tôi là Brexit - the UK leaves Europe- U xóa đầu và K đến cuối.
Snowcrash

47

Nó phụ thuộc vào việc bạn đang sử dụng chế độ chỉnh sửa vi ( set -o vi) hay emacs ( set -o emacs) trong hệ vỏ của mình.

Theo mặc định, trình bao của bạn thường mặc định ở chế độ chỉnh sửa emacs.

  • Trong chế độ emacs, việc xóa đến cuối dòng có thể được thực hiện bằng cách sử dụng lệnh ctrl- k.

  • Tuy nhiên, nếu bạn tình cờ sử dụng chế độ chỉnh sửa vi trong vỏ lệnh của mình, kết quả tương tự có thể được thực hiện bằng cách nhập Esc(sẽ đưa bạn vào chế độ lệnh) theo sau d- $(nếu bạn muốn xóa toàn bộ dòng, hãy nhập dd).

Nếu bạn không chắc chắn về chế độ chỉnh sửa mà bạn hiện đang sử dụng trong trình bao của mình, hãy nhập lệnh set -otừ dòng lệnh và bạn sẽ có thể xác định chế độ chỉnh sửa nào bạn đang sử dụng:

set -o
...snip...
emacs           on
...snip...
vi              off

Để chuyển chế độ chỉnh sửa dòng lệnh của bạn, chỉ cần nhập:

set -o vi

hoặc là

set -o emacs

4
Nếu bạn muốn ghi nhớ, Kviết tắt của kill (dòng bắt đầu từ vị trí con trỏ).
Gregor Botero

5
Trong chế độ lệnh vi, Dhoạt động tương tự nhưd$
glenn jackman 17/03/13

3
+1 cho việc thực sự viết câu trả lời đúng và giải thích rằng shellopts có thể thay đổi nó.
TC1

1
>> Cảm ơn. Có vẻ như tôi đang sử dụng vi, vì vậy CTRL + K thực hiện thủ thuật. - Adam Matan Adam, sau đó là emacs-mode bạn đang ở chứ không phải vi.
bắt22

1
Trong Kubfox oneiric (konsole), Ctrl + K và ESC Shift + D đều hoạt động. ESC d xóa một số dòng (có thể lên đến một ';'). (Nhập $ sau đó chỉ gửi $ đến bảng điều khiển.) Tôi đã cố gắng tìm ra cách để làm điều đó trong một thời gian ngắn. Cảm ơn!
Joe

3

Trong trường hợp bạn chỉ quen thuộc với một trong Zsh và Bash, đây là các ràng buộc khóa tương đương mà bạn (có thể) cần:

bash

bind '"\C-k"':kill-line

zsh

bindkey "\C-k"      vi-kill-eol

Thông tin thích hợp khác

Để có được một danh sách các ràng buộc chính:

# bash
bind -p

# zsh
bindkey

Tôi bối rối. Đối với Bash, không nên "^k" dùng Control + K?
wjandrea

Xin lỗi, đó là ràng buộc cá nhân của tôi. Tôi đã đặt ràng buộc mặc định nhưng không thoải mái với cú pháp bash. Vì bạn đã đề cập đến những gì nên tôi đã lấy từ của bạn cho nó và chỉnh sửa bài viết của tôi.
Sridhar Sarnobat

1
Ồ được thôi. Tôi không quen thuộc với bản thân mình, nhưng chỉ cần kiểm tra và nó sẽ được"\C-k"
wjandrea
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.