Bash: Tôi có thể đặt Ctrl-Backspace để xóa từ ngược không?


19

Khi trong shell (bash) - Tôi muốn liên kết Ctrl-Backspace để "xóa từ lùi". Có thể không?

Chỉnh sửa :

Tôi đang sử dụng konsole- thiết bị đầu cuối tại KDE.


2
Câu hỏi là thẳng về phía trước, không phàn nàn về điều đó. Tôi chỉ muốn nhận xét rằng nó thường có giá trị rất nhiều để tạo điều kiện cho các ràng buộc khóa "tiêu chuẩn" đã tồn tại trong nhiều ứng dụng, thay vì tùy chỉnh không có lợi ích thực sự và chắc chắn không bao giờ thấy hành vi trên các hệ thống nước ngoài. Ctrl+wlà những gì bạn nên làm quen, imho.
Daniel Andersson

@ Daniel Andersson: hoặc cách khác - Bạn có thể phát triển cách chuyển cài đặt của mình sang máy nước ngoài.
Adobe

Chia sẻ dotfiles là một vấn đề được giải quyết, nhưng nó không giúp được gì nhiều ngoài các máy tính cục bộ nhiều hơn hoặc ít hơn, nơi bạn có các đặc quyền khá mở. Nếu bạn ở trên một hệ thống nước ngoài, rất có thể bạn không có quyền tự do cấu hình lại những thứ như thế (ít nhất là không bị bash bởi những đồng nghiệp cũng sử dụng cùng một máy :-)). Ngoài ra, mỗi ứng dụng mới sẽ cần điều trị đặc biệt.
Daniel Andersson

6
Tôi đã gặp vấn đề nghịch đảo, tôi đã từng sử dụng Ctrl-w"xóa từ trước" trong bảng điều khiển và thực hiện theo bản năng ngay cả trong Eclipse hoặc Chrome, nơi nó có nghĩa là đóng tab / đóng tệp hiện tại. Khá khó chịu.
Ezequiel Muns

1
Tôi có cùng vấn đề với Chrome SShInATab. Làm cách nào để tôi làm ctrl-W mà không có ctrl-W? :)
Riccardo SCE

Câu trả lời:


11

Tại sao không chỉ sử dụng Alt+ Backspacehoặc Ctrl+ Wđã được ánh xạ trong hầu hết các thiết bị đầu cuối. Không chắc chắn về Console. Xmodmap (man xmodmap) cũng có thể được sử dụng để ánh xạ lại các khóa tùy chỉnh khác. (Nghịch lý thay, xmodmap không thể ánh xạ lại Backspace rất tốt vì thiết bị đầu cuối ghi đè lên ánh xạ, nhưng nó hoạt động tốt với hầu hết các khóa ...).


9
Bởi vì tôi đã từng sử dụng Ctrl-Backspace trong Emacs của mình. Tôi biết về Ctrl-w. Alt-Backspace là mới đối với tôi (+1).
Adobe

1
Điểm tốt, @hellork. Bạn có thể chặn điều khiển + backspace tại máy chủ X (thông qua xmodmap) và ánh xạ nó tới một số ký tự không được sử dụng (chẳng hạn như alt-backspace).

4
Điều khó chịu về điều này là ctrl + backspace là một ánh xạ thực sự phổ biến để "xóa từ ngược" trong hầu hết các ứng dụng GUI trên hầu hết các hệ điều hành chính. Tương tự, Ctrl + W được trải rộng cho "đóng cửa sổ". Alt + w hiếm khi được sử dụng cho bất cứ điều gì trong GUI, mà tôi có thể nghĩ đến. Tiêu chuẩn hóa sẽ là tuyệt vời. Tôi tự hỏi điều gì sẽ là sự gián đoạn lớn hơn, thay đổi thiết bị đầu cuối hoặc thay đổi GUI?
ness101

1
@naught, Control-W đã là khóa xóa từ mặc định trên các thiết bị đầu cuối unix. Vâng, nó mâu thuẫn với quy ước Windows / GUI, nhưng thực tế nó đã xuất hiện đầu tiên - sau nhiều năm. Đổ lỗi cho Microsoft!
alexis

11

Tôi tìm thấy chủ đề này thông qua google, nhưng câu trả lời không phải là những gì tôi muốn nghe. Vì vậy, tôi đã chơi xung quanh:

Trên thiết bị đầu cuối của tôi, backspace bình thường gửi ^H, trong khi ctrl + backspace gửi ^?. Vì vậy, nó đơn giản là một trường hợp từ chối ^?để xóa một từ, theo mặc định là có sẵn thông qua Ctrl + W.

Đầu tiên (thử không thành công):

$ bind -P | grep 'C-w'
unix-word-rubout can be found on "\C-w".

Vì vậy, điều này sẽ làm việc:

$ bind '"\C-?":unix-word-rubout'

Tuy nhiên nó không ... ai có thể giải thích?

Thứ hai (thành công) hãy thử:

$ bind '"\C-?":"^W"'

Trong đó ^Wlà một chữ / nguyên ^W(nhấn ctrl + V sau đó ctrl + W để làm cho nó xuất hiện).


Giải pháp đầu tiên của bạn làm việc cho tôi, thực sự! Thứ hai thì không.
Drew Hoskins

Lần thử thứ hai dường như tự thay thế backspace chứ không phải Ctrl-Backspace?
dùng541686

7

Chỉ cần chỉnh sửa của bạn ~/.inputrc(bạn có thể cần phải tạo một hoặc sao chép cái trong /etc/inputrcđó) để nó chứa:

# Ctrl-Delete: delete next word
"\e[3;5~": shell-kill-word

# Ctrl-Backspace
"\C-H": shell-backward-kill-word

Điều này cũng sẽ ánh xạ Ctrl+ Deleteđể xóa từ bên cạnh con trỏ.


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

6

Có một số câu trả lời hay ở đây, nhưng tôi đã giải quyết nó trong Konsole với Cài đặt-> Chỉnh sửa hồ sơ hiện tại-> Bàn phím-> Chỉnh sửa, sau đó thêm ánh xạ từ Backspace+Controlđến \x17. (Tôi đã tìm thấy mã ASCII cho Ctrl-w bằng cách sử dụng showkey --ascii.)


Cảm ơn đã chỉ ra điều với showkey. Vì vậy, tôi đã tìm ra rằng ALT+Dđể xóa từ ở phía trước con trỏ sẽ tương ứng với \x1b\x64.
Loki

Cảm ơn bạn, nó đã giải quyết vấn đề của tôi. Trong trường hợp của tôi, tôi cần phải ánh xạ lại Alt + Backspace và trình tự của nó là \x1b\x7f.
DDMC

3

Điều đó phụ thuộc vào những gì bash nhìn thấy. Trên tương tác thiết bị đầu cuối thông thường, bash không thấy bạn đã sửa đổi phím nào, chỉ có ký tự kết quả. Backspace đã giống như control-H chẳng hạn. Giữ sự thay đổi hoặc kiểm soát làm cho không có sự khác biệt.

TUY NHIÊN, ứng dụng thiết bị đầu cuối của bạn (xterm? Cmd? Terminal? Putty? Phụ thuộc vào hệ điều hành của bạn) có thể thấy các phím bấm của bạn và có thể có cách ánh xạ tổ hợp phím điều khiển lùi vào một thứ gì đó có thể phân biệt được với backspace.


Tôi thấy rằng bash của tôi không thấy backspace. Nhưng có lẽ nó có thể làm cho nó thấy điều đó.
Adobe

@adobe, ý bạn là gì? Nhập 'stty' tại thiết bị đầu cuối của bạn và sau đó đọc hướng dẫn về nó. Nếu ^ H được đặt là nhân vật xóa của bạn, bạn có thể đặt nó thành một thứ khác ... nếu bạn có lý do chính đáng.

1
Có một ví dụ điển hình về cách thực hiện việc này tại github.com/calj/gtconf/blob/master/zsh/zshrc . Konsole cho phép bạn làm điều đó. Sao chép một trong các tệp * .keytab từ / usr / share / kde4 / apps / konsole / vào ~ / .kde / share / apps / konsole và sửa đổi nó bằng các gợi ý trong liên kết ở trên, xóa dòng "Phím lùi" thêm: key Backspace-Shift-Control : "\x7f"key Backspace-Shift+Control : "\E[9;3~"cũng thay đổi dòng tiêu đề trong khi bạn đang ở đó : keyboard "Xfree4 Modlist", ví dụ. Sau đó, bạn có thể thêm "\e[9;3~": backward-kill-word"vào ~ / .inputrc
Adam

2

Thử đi:

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

Tùy chọn thêm các mục sau vào ~ / .inputrc để làm cho nó vĩnh viễn:

"\C-_": backward-kill-word

Hoạt động trên bash 4.3.11 trong Kubfox 14.04


2
Control-backspace dường như không giống với Control-undererscore.
Thomas Dickey

1
Trong tất cả những điều tôi đã thử trong chủ đề này, điều này đã làm việc! Sử dụng "GNU bash, phiên bản 4.3.48 (1) -release (x86_64-pc-linux-gnu)" trên bash trên windows / WSL
Markus Jevring

Điều này làm việc tuyệt vời cho tôi trong cygwin, sử dụng GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin).
zagyi

1

Trong Konsole:

  • nhấp chuột Settings -> Edit current profile
  • nhấp vào tab 'Bàn phím' -> [Edit...]
  • nhấp vào [Add]nút và dưới Key Combinationloại cột Backspace+Ctrl. Trong Outputloại cột 0x08(thông thường là ký tự backspace)

Bây giờ bạn sẽ có thể ánh xạ khóa đó backward-kill-wordqua

# ~/.bashrc

bind '"\x08":backward-kill-word'

Cảm ơn. Làm việc cho tôi, trong xfce4-terminal ít nhất.
limon

0

Trên hầu hết các thiết bị đầu cuối CTRL + W nên xóa một từ ngược. Điều này hoạt động với xterm và tôi đoán nó hoạt động với konsole. CTRL + W là một ràng buộc khóa tiêu chuẩn trên chương trình dựa trên văn bản sẽ hoạt động với vim ở chế độ chèn, emacs và mọi shell.


5
Tôi có Ctrl-w được liên kết với "tab đóng" trong Emacs, FireFox, Krusader - vì vậy tôi cũng đặt nó thành một tổ hợp đóng tab trong Konsole.
Adobe
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.