Làm thế nào tôi có thể xóa một từ lạc hậu tại dòng lệnh (bash và zsh)?


118

Làm thế nào tôi có thể xóa một từ lạc hậu tại dòng lệnh? Tôi thực sự quen với một số biên tập viên xóa 'từ' cuối cùng bằng cách sử dụng Ctrl+ Backspacevà tôi cũng thích chức năng đó ở dòng lệnh.

Hiện tại tôi đang sử dụng Bash và mặc dù tôi có thể nhảy lùi một từ và sau đó xóa một từ, tôi muốn sử dụng nó như một phím nhanh hoặc sự kiện là Ctrl+ Backspace.

Làm thế nào có thể thực hiện điều này?

Câu trả lời:


169

ctrlwlà "tiêu diệt từ" tiêu chuẩn (aka werase). ctrluGiết chết cả dòng ( kill).

Bạn có thể thay đổi chúng với stty.

-bash-4.2$ stty -a
speed 38400 baud; 24 rows; 80 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
        -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
        -extproc -xcase
iflags: -istrip icrnl -inlcr -igncr -iuclc ixon -ixoff ixany imaxbel
        -ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -ocrnl -onocr -onlret -olcuc oxtabs -onoeot
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
        eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = <undef>;
        stop = ^S; susp = ^Z; time = 0; werase = ^W;
-bash-4.2$ stty werase ^p
-bash-4.2$ stty kill ^a
-bash-4.2$

Lưu ý rằng người ta không phải đặt ký tự điều khiển thực tế trên dòng, stty hiểu cách đặt ^và sau đó là ký tự bạn sẽ đánh với điều khiển.

Sau khi làm điều này, nếu tôi nhấn ctrlpnó sẽ xóa một từ khỏi dòng. Và nếu tôi đánh ctrla, nó sẽ xóa toàn bộ dòng.


Sử dụng sttylệnh tôi đã cố gán "kill word" cho Ctrl+BckSpcbằng cách gõ stty werasetheo sau là Ctrl-v Ctrl-Backspace. Điều này chèn ký tự Ctrl-Backspace theo nghĩa đen làm đối số cho stty werase. Thật không may, nó không yêu cầu gõ Ctrl-Backspaceđể xóa từ mà chỉ hoạt động với Backspacephím. Vì vậy, tôi muốn thứ hai yêu cầu của @terdon để tìm hiểu làm thế nào để làm điều này. Để đặt lại werasemặc định, sử dụng stty werase Ctrl-v Ctrl-w.
Timothy Martin

@TimothyMartin Tôi hơi bế tắc về cách làm ctrl-backspace. Backspace thường được gửi dưới dạng ctrl-hhoặc ctrl-?, vì vậy ctrl-backspacebằng cách nào đó sẽ được ctrl-ctrl-backspace. Tôi đã cố gắng để tìm ra nếu một cái gì đó khác nhau đã được gửi, nhưng ít nhất, putty, chỉ gửi backspace khi bạn gõ ctrl-backspace.
kurtm

3
ctrl + w xóa từ một cách hiệu quả nhưng nó cũng sao chép vào bảng tạm, xóa mọi thứ bạn đã lưu trữ (hoặc đẩy nó xuống?).
Elijah Lynn

1
esc - xóa chỉ hoạt động :-)
Rene Wooller

1
đó là ... cuộc sống thay đổi. Chúa tôi.
dây00

27

Bạn cũng có thể làm điều này với CtrlW.

Một tùy chọn khác là đặt lối tắt của riêng bạn nhưng điều này sẽ phụ thuộc vào trình giả lập thiết bị đầu cuối bạn đang sử dụng. Cho xtermrxvtcó thể những người khác, hãy thêm dòng này vào ~/.inputrc(tạo tệp nếu nó không tồn tại):

## rxvt, xterm
"\b":backward-kill-word

gnome-terminalvà ilk của nó có vẻ như có AltBackspacemặc định nhưng rõ ràng yêu cầu bạn phải vá readline()để có được CtrlBackspace.

Cũng thấy:



0

Trên máy Mac, bạn có thể sử dụng:

Fn+Delete


2
Điều đó xóa 1 ký tự phía trước con trỏ, không phải 1 từ phía sau
Dannid

Không biết điều này có còn phù hợp không, nhưng đó sẽ là <Alt> + <Backspace> trên Mac.
Hassan
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.