myk*_*hal 10 terminal text backspace
我想知道为什么普通Linux终端中的退格字符实际上不会在打印时擦除字符(通常在键入时有效).
这按预期工作:
$ echo -e "abc\b\b\bxyz"
xyz
Run Code Online (Sandbox Code Playgroud)
(\b
评估为退格,也可以插入Ctrl+ V Ctrl+ H- 呈现为^H
(0x08
))
但是当退格后的字符数量减少时,会发现奇怪的行为:
$ echo -e "abc\b\b\bx"
xbc
Run Code Online (Sandbox Code Playgroud)
它的行为类似于左箭头键而不是退格键:
$ echo -e "abc\e[D\e[D\e[Dx"
xbc
Run Code Online (Sandbox Code Playgroud)
擦除线后退工作正常:
$ echo -e "abc\e[1Kx"
x
Run Code Online (Sandbox Code Playgroud)
事实上,当我在终端输入Ctrl+ V Backspace时,^?
(0x7f
)产生而不是^H
,这是Delascii字符,但是Ctrl+ V Del产生<ESC>[3~
,但它是另一个故事..
那么有人可以解释为什么打印的退格字符不会删除字符吗?
(我的环境是xterm的Linux和一些其他的终端仿真器,$TERM
== xterm
,试图vt100
,Linux
以及)
msa*_*ord 19
你所看到的是正确的.退格或^H
向左移动光标,不擦除.要删除字符,您需要输出^H ^H
(Backspace-Space-Backspace).
回答您的评论 - Backspace在VT100/ANSI系列终端中以这种方式定义,许多终端控制代码序列从这些终端借用.请参阅此处的VT100用户手册,其中将BS的功能定义为"将光标移动到左侧一个字符位置,除非它位于左边距,在这种情况下不会发生任何操作".换句话说,这是历史的怪癖:)
至于为什么最初以这种方式定义它 - 我认为拥有非破坏性光标移动控制代码更灵活,因为破坏性退格可以如上所示实现.
归档时间: |
|
查看次数: |
10400 次 |
最近记录: |