我想玩一下find -fprintf
。如果您不知道它的作用,它与写入您指定其名称的文件-fprintf
相同。-printf
现在,当我运行这样的命令时:
find -maxdepth 1 -type d -fprintf output "%p\b\n"
Run Code Online (Sandbox Code Playgroud)
我得到以下内容output
(使用vim
几乎任何文本编辑器):
.^H
./directory-1^H
./directory-2^H
./directory-3^H
Run Code Online (Sandbox Code Playgroud)
我知道这^H
是退格字符。开头:output
less
./directory-
./directory-
./directory-
Run Code Online (Sandbox Code Playgroud)
所以,问题是:
vim
和其他文本编辑器(尝试过nano
和emacs
)会显示退格键而不通过删除其前面的字符来解释它,但less
会显示退格键?\n
不是换行呢?我在我的机器(笔记本电脑)上运行它,而无需在任何地方进行 sshing。使用带有 konsole 和 tmux 的 GNU/Linux Ubuntu 16.04 LTS。
小智 5
为什么 vim 和其他文本编辑器(尝试过 nano 和 emacs)显示退格键而不通过删除其前面的字符来解释它,但 less 却这样做?
他们为什么要这么做?FWIW,浏览器也没有:-)
$ printf "<html>foo\bbar</html>" > /tmp/foo.html
$ firefox /tmp/foo.html
Run Code Online (Sandbox Code Playgroud)
编辑器是否还应该解释其他类型的标记,例如迷你 Markdown*foo*
或**bar**
?
请注意,退格键不仅仅是“删除”中的前一个字符less
,而且还用作粗略的格式化字符。x\bx
将以x
粗体打印,并在x\b_
其下划线(在某些终端上会导致它以不同的颜色打印):
printf "H\b_e\b_r\b_e\b_'s\bs Johnny!" | less
Run Code Online (Sandbox Code Playgroud)
为什么编辑器不打印 \n 字符而不是向下换行?
他们可以做到这一点。例如,如果您使用:set list
in vi
,则换行符将打印为$
,制表符将打印为^I
。
打印退格键和在键盘上按退格键(按键盘上的退格键实际上会删除字符)之间有什么区别?
在硬类型终端(在纸上打印)上,打印退格会导致笔架向左移动一个位置,因此后续的字符将覆盖而不是删除纸上已有的内容。在玻璃 (CRT) 和模拟终端上,向左移动位置并写入字符会产生“擦除”效果,因为覆盖字符会完全替换它。但\b
本身并没有删除任何内容:printf "123\b\n"
will print 123
not 12
。
后者是 tty 驱动程序的一个功能,它将一些输入字符解释为编辑/控制命令(erase
、werase
、intr
、kill
-- 查看stty(1)
或termios(3)
手册页以获取完整列表)。
并且退格键并不总是生成\b
/ ^H
(BS) 字符。大多数时候是\x7f
/ ^?
(DEL)。
但你可以将其设置为你喜欢的任何值:
$ stty erase '#'
Run Code Online (Sandbox Code Playgroud)
现在点击#
将删除之前的字符,就像在 unix v7 中一样。
归档时间: |
|
查看次数: |
2081 次 |
最近记录: |