Có thể cấu hình ctrl-w (xóa từ) không?


40

Thông thường, Ctrl+ Wxóa trở lại khoảng trắng cuối cùng.

Có thể cấu hình nó để sử dụng các ký tự bổ sung, chẳng hạn như /?

Chỉnh sửa: Để rõ ràng hơn: Tôi không muốn định cấu hình khóa cho nó, tôi cũng muốn dừng xóa /.

Thí dụ:

vim /foo/bar^W
vim /foo/

Câu trả lời:


29

Điều làm việc cho tôi là thêm các dòng sau vào .bashrc của tôi

stty werase undef
bind '\C-w:unix-filename-rubout'

Bạn cần dòng undef nếu không bash bỏ qua ràng buộc mới của bạn cho C-w


3
Cần lưu ý rằng stty werase undefsẽ ngăn bạn sử dụng Cw trong bất kỳ chương trình nào (liên kết sẽ cho phép bạn sử dụng ở chế độ đọc)
0fnt

24

Bạn sẽ có thể sử dụng Esc, sau đó xóa lùi để xóa các từ được phân cách bằng dấu gạch chéo.

Bạn có thể thay đổi điều này bằng cách đặt cái này vào bạn .bashrc:

bind '\C-f:unix-filename-rubout'

Bây giờ sử dụng Ctrl+f để làm những gì bạn muốn.


1
cảm ơn, đó là lệnh hoạt động. Có cách nào để ghi đè lệnh của Cw không? Nếu tôi thay đổi nó thành C-w:..., hành vi mặc định xóa sang không gian tiếp theo vẫn bắt đầu. Trên một khóa khác (như F) nếu hoạt động tốt.
SkaveRat

Tôi không nghĩ ctrl-w được quản lý bởi shell. Nó có thể được quản lý bởi tty cũng. Cài đặt tty của bạn được hiển thị bởi stty -a? Bạn có control-w làm char mặc định cho werase không? Nếu bạn xóa cài đặt đó khỏi tty, bằng dấu phẩy stty werase undef, thì bash có hoạt động như mong đợi không?
eppesuig

23

Đối với vấn đề cụ thể này, bạn cũng có thể sử dụng:

Alt + Backspace

$ cd /home/me/test/a_dir/    # Alt + Backspace
$ cd /home/me/test/          # Alt + Backspace
$ cd /home/me/               # ...

Tham khảo tốt: Cuộc phiêu lưu với xóa từ bash


2
Tuyệt vời! Hầu hết các câu trả lời khác đề nghị rebinding Ctrl+whoặc Ctrl + b hoặc một cái gì đó unix-filename-rubout, nhưng tốt hơn là có một ràng buộc tích hợp: M-backspace (Alt + backspace hoặc Esc backspace)
Colin D Bennett

Không làm việc cho tôi
ethanjyx

@ethanjyx ơi. Tôi đang làm việc trên GNU bash. Bạn cũng trong hương vị này?
fedorqui

7

Với bash, bạn có thể có được hiệu ứng mong muốn, đặt phần sau vào tệp ~ / .bashrc của bạn:

bind '"\C-w":backward-kill-word'

Nhấn CTRL+Vvà tổ hợp phím của bạn để xem giao diện của trình giả lập thiết bị đầu cuối của bạn. Ví dụ, CTRL+bkspcó thể được giải thích khác nhau trên các thiết bị đầu cuối khác nhau, ví dụ ^Hhoặc ^?. Các ^nhân vật là giống như CTRL.


Tôi nghĩ rằng tôi đã không đủ cụ thể với câu hỏi của tôi. Tôi muốn có /một ký tự dừng bổ sung, không phải là một cách để ràng buộc lệnh xóa từ trên một khóa khác. Tôi đã chỉnh sửa câu hỏi của mình
SkaveRat

Sử dụng back-kill-word được liên kết với \ Cw, nó sẽ xóa lùi về dấu gạch chéo được đưa ra cuối cùng nếu có trong một từ và nó sẽ xóa các từ được phân cách bằng khoảng trắng. Đây không phải là những gì bạn muốn?

Hệ thống của tôi sử dụng ^F- nhưng sử dụng "\^F"trong tập lệnh ở trên không hoạt động
SkaveRat

1
Các Ctrlnhân vật được viết \Ctrong kịch bản và không \^.
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.