Bash: xóa từ trước con trỏ


76

Hãy xem xét dòng lệnh bash sau, trong đó ^ biểu thị vị trí con trỏ:

svn commit -m very/long/path/to/some/file "[bug 123456] Fix the pixel issue"
              ^

Tôi muốn cam kết một tệp khác với cùng một thông điệp. Làm cách nào tôi có thể xóa từ hiện tại, từ vị trí con trỏ sang không gian tiếp theo? Ngoài ra còn có một phím tắt để xóa lùi, tạo con trỏ đến không gian đầu tiên lùi?

Cập nhật: ctrl + wxóa ngược, nhưng phím tắt nào xóa một từ phía trước?


2
Ctrl ulà một tùy chọn để xóa từ vị trí con trỏ đến đầu ...
hấp dẫn về

23
Hãy thử alt + d, điều đó có thể hữu ích, khi chế độ chỉnh sửa emacs được đặt.

@Mik làm thế nào để bạn kích hoạt chế độ emacs?
Adam Matan

@AdamMatan set -o emacscho phép nó, nhưng nó thường là mặc định; nếu không, bạn có thể đặt dòng đó vào .bashrchoặc .bash_aliasessau đó lấy tệp hoặc tải lại thiết bị đầu cuối. Tuy nhiên, sau đó các phím tắt bạn có thể được sử dụng trong chế độ vi sẽ không khả dụng, mặc dù các phím tắt như ctrl + c sẽ vì chúng không phải là phím tắt Bash.

Câu trả lời:


56

Tôi đã trả lời câu hỏi tương tự trên unix.stackexchange.com :

Bash có các lệnh readline không bị ràng buộc theo mặc định. Bạn có thể tìm thấy chúng tại tài liệu tham khảo: http://www.gnu.org/software/bash/manual/html_node/Bindable-Readline-Commands.html#Bindable-Readline-Commands

Lệnh bạn đang tìm kiếm được gọi là "shell-backward-kill-word". Bạn phải chọn phím tắt trước. Hãy sử dụng Crtl + p, vì đó là "lệnh trước" - giống như mũi tên lên.

bind '"\C-p": shell-backward-kill-word'

Sự khác biệt duy nhất là bạn phải sử dụng lệnh "shell-kill-word", vì bạn muốn xóa về phía trước.

Ngoài ra còn có lệnh "kill-word" với Meta+ dphím tắt (thử Esc+ dnếu bạn không có phím Meta). Nó sẽ xóa chỉ một phần của đường dẫn cùng một lúc.


31
Alt-d hoạt động với tôi
ricab

8
Nói chung, trong thế giới bàn phím nơi Meta không tồn tại, Alt = Meta.
Nate CK

Tôi là thế giới nơi bạn có nhiều bàn phím khác nhau, một thực tế tiện lợi và khá hữu ích là Esc làm tiền tố cũng hoạt động như Meta.
tripleee

1
Nói tóm lại, hãy thêm ví dụ này vào tệp $ HOME / .inputrc của bạn : "\ew": shell-kill-word , điều đó sẽ khiến Alt-w chuyển tiếp xóa một từ, giống như CTRL-w ngược lại xóa một từ (và không giống như Alt-d sẽ chuyển tiếp xóa nhưng dừng lại ở ví dụ a / hoặc - và các ký tự khác)
user964970

7

Đã thử nghiệm cả esc+ dalt/ opt+ dtrên OSX Mavericks và chúng cũng hoạt động ở đó.


12
Option + dcho tôi trên OSX
Ivan Balashov

4
-1 OSX không phải là Ubuntu. Vui lòng thêm một nhận xét, nhưng đây không phải là một câu trả lời.
wjandrea

trước tiên bạn phải bật hộp kiểm "sử dụng tùy chọn làm khóa meta" trong tùy chọn thiết bị đầu cuối (cấu hình -> tab bàn phím -> hộp kiểm)
nils petersohn

control + dtrên mac Sierra
mfink

2
@IvanBalashov nếu bạn đang sử dụng iterm, hãy đặt khóa opt của bạn là esc +. Trong Hồ sơ> khóa
tessie
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.