Bash, làm thế nào để sửa chữa toàn cầu ^ H và ^? vấn đề backspace


12

Tôi muốn khắc phục sự cố thường gặp này khi trình bao trên máy chủ từ xa nghĩ rằng phím xóa lùi của thiết bị đầu cuối của tôi ^?và đôi khi nó nghĩ là như vậy ^H, và xảy ra không chính xác và xuất ra ký tự sai khi tôi nhấn backspace. Nếu tôi đặt nó thành ^ H hoặc ^? với stty erase ^Hhoặc stty erase ^?trong tệp .bashrc của tôi và sử dụng một số thiết bị đầu cuối khác để truy cập máy chủ, nó thường kết thúc sai. Vì vậy, tôi bị mắc kẹt khi phải gõ thủ công stty erase [whatever]để sửa nó khi tôi nhận thấy phím backspace bị sai.

Những gì tôi muốn làm là liên kết cả hai ^?^Hbackspace, bởi vì nếu tôi có thể làm điều này, tôi chỉ có thể thêm nó vào tất cả các tệp .bashrc của mình và chắc chắn nó sẽ chấm dứt cơn ác mộng này. Điều này có thể không? Nếu vậy thì thế nào?

Câu trả lời:


8

Trang này có tất cả thông tin bạn cần về vấn đề này; Tôi đề nghị bạn đọc nó. Bây giờ, nếu bạn đang sử dụng bash, nó sẽ đủ để tạo một ~/.inputrctệp chứa các dòng này:

"\e[3~": delete-char
# this is actually equivalent to "\C-?": delete-char
# VT
"\e[1~": beginning-of-line
"\e[4~": end-of-line
# kvt
"\e[H":beginning-of-line
"\e[F":end-of-line
# rxvt and konsole (i.e. the KDE-app...)
"\e[7~":beginning-of-line
"\e[8~":end-of-line

Là một phần thưởng bổ sung, họ sẽ làm HomeEndlàm việc tốt.


2

Hầu hết các thông tin trong http://web.archive.org/web/20120621035133/http://www.ibb.net/~anne/keyboard/keyboard.html thực sự là những gì bạn cần. Một điều chỉnh về thông tin, là gợi ý của họ (đối với XTerm):

*VT100.Translations: #override \
          <Key>BackSpace: string(0x7F)\n\
          <Key>Delete:    string("\033[3~")\n\
          <Key>Home:      string("\033[1~")\n\
          <Key>End:       string("\033[4~")
*ttyModes: erase ^? 

Mặc dù điều này sẽ khiến XTerm gửi đúng ký tự và thay đổi stty để có backspace như ^?, nhưng nó vẫn sẽ báo cáo một ^Hcách rõ ràng là backspace trong một số trường hợp, phá vỡ backspace trong chế độ Vim instert (xem tại đây: https://bugs.gentoo.org / 154090 ). Để tránh điều này, sử dụng VT100.backarrowKey: falsethay thế, vì vậy:

*VT100.backarrowKey: false
*VT100.Translations: #override \
          <Key>Delete:    string("\033[3~")\n\
          <Key>Home:      string("\033[1~")\n\
          <Key>End:       string("\033[4~")
*ttyModes: erase ^? 

(xem thêm [vui lòng chèn liên kết tại đây])


Đọc qua "Tại sao tôi cần 50 danh tiếng để bình luận" để đảm bảo bạn hiểu cách bạn có thể bắt đầu bình luận.
Pimp Juice IT

Tôi không yêu cầu bất kỳ ai làm rõ. Thay vào đó, tôi đã cung cấp làm rõ và điều chỉnh nhỏ cho câu trả lời trên. Nhưng, nếu điều này khá là tài liệu trong một câu trả lời, vì vậy hãy là nó. Tôi đã thêm văn bản xung quanh làm cho nó một câu trả lời đầy đủ.
amosonn

Ngoài ra, liên kết này bị thiếu trong câu trả lời của tôi, nhưng tôi không thể thêm nó vào đó. wiki.archlinux.org/index.php/Xterm#Fix_the_backspace_key
amosonn
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.