2010-05-18 46 views
8

Tôi tự hỏi tại sao nhân vật xóa lùi trong thiết bị đầu cuối Linux phổ biến không thực sự xóa các nhân vật, khi in (mà thường hoạt động khi gõ) ..Backspace nhân vật weirdness

này hoạt động như mong đợi:

$ echo -e "abc\b\b\bxyz" 
xyz 

(\b đánh giá để backspace, có thể được chèn cũng như Ctrl +VCtrl +H - render như ^H (0x08))

nhưng khi có ít nhân vật sau khi backspaces, hành vi kỳ lạ được tiết lộ:

$ echo -e "abc\b\b\bx" 
xbc 

nó hoạt động như phím mũi tên trái thay vì xóa lùi:

$ echo -e "abc\e[D\e[D\e[Dx" 
xbc 

erase dòng trở lại hoạt động bình thường:

$ echo -e "abc\e[1Kx" 
x 

Thực tế , Khi tôi gõ Ctrl + VBackspace trong thiết bị đầu cuối, ^? (0x7f) đang mang lại thay vì ^H, đây là Del ascii nhân vật, nhưng Ctrl + VDel sản xuất <ESC>[3~, nhưng nó là một câu chuyện khác ..

Vì vậy, ai đó có thể giải thích lý do tại sao nhân vật backspace in không xóa các ký tự?

(môi trường của tôi là xterm Linux và một số giả lập thiết bị đầu cuối khác, $TERM == xterm, cố gắng vt100, Linux cũng)

Trả lời

16

gì bạn đang nhìn thấy là đúng. Phím xóa lùi hoặc ^H di chuyển con trỏ sang trái, không xóa. Để xóa một ký tự, bạn cần xuất ^H ^H (Backspace-Space-Backspace).


Để trả lời nhận xét của bạn - Backspace được xác định theo cách trong dòng thiết bị đầu cuối VT100/ANSI, từ đó có nhiều chuỗi mã điều khiển đầu cuối mượn. Xem hướng dẫn sử dụng VT100 here xác định chức năng của BS là "Di chuyển con trỏ sang vị trí ký tự bên trái, trừ khi nó ở lề trái, trong trường hợp không có hành động nào xảy ra". Nói cách khác, nó là một dấu ngoặc của lịch sử :)

Tại sao nó được xác định theo cách này ban đầu - tôi đoán nó linh hoạt hơn để có mã kiểm soát chuyển động con trỏ không phá hủy, như backspace phá hoại có thể được thực hiện như được hiển thị ở trên.

+0

tốt, đây không phải là giải thích _why_ ký tự điều khiển backspace hoạt động như phím con trỏ trái, không theo ý nghĩa của commons (xóa ký tự cuối cùng) – mykhal

+0

bây giờ tôi hài lòng, cảm ơn liên kết cụ thể :) – mykhal

+7

Lý do REAL nó hoạt động theo cách này là vì các thiết bị đầu cuối cũ hơn, "bản sao cứng" in trên giấy giống như máy đánh chữ.Trên một thiết bị đầu cuối như vậy không có cách nào để xóa một ký tự khi nó được xuất ra. Thiết bị đầu cuối giống như máy đánh chữ cũng là lý do chúng tôi vẫn bị mắc kẹt với các ký tự "vận chuyển trở lại" và "nguồn cấp dữ liệu dòng" riêng biệt để kết thúc các dòng trên Windows. – alexis

Các vấn đề liên quan