在我的脚本中,我打印退格符号,以便在控制台中实现一些用户界面,如here所述。
效果很好,但现在我想将输出保存到我的日志文件中(通过重定向stdout)。当我使用tail
或less
等命令行工具阅读此文件时,我会获得 final '输出视图'我的脚本(在这种情况下是完成的进度条),这种行为对我来说是首选。但是,如果我用vim打开日志文件,它会将所有写入的符号显示到文件中,只需转义为^H
的反斜杠。
如何设置我的vim以显示我的日志文件,类似于less
或tail
?
以下是一个例子。
1)python脚本:
import sys
import time
for i in range(10):
if i: sys.stdout.write(chr(8) * 10)
sys.stdout.write(str(i) * 10)
sys.stdout.flush()
time.sleep(0.5)
sys.stdout.write('\n')
sys.stdout.flush()
2)运行脚本:python program.py > out.txt
3)cat out.txt
:
$ cat out.txt
9999999999
4)显示我vim out.txt
的内容:
0000000000^H^H^H^H^H^H^H^H^H^H1111111111^H^H^H^H^H^H^H^H^H^H2222222222^H^H^H^H^H^H^H^H^H^H3333333333^H^H^H^H^H^H^H^H^H^H4444444444^H^H^H^H^H^H^H^H^H^H5555555555^H^H^H^H^H^H^H^H^H^H6666666666^H^H^H^H^H^H^H^H^H^H7777777777^H^H^H^H^H^H^H^H^H^H8888888888^H^H^H^H^H^H^H^H^H^H9999999999
答案 0 :(得分:2)
您可以使用以下命令将特殊键^H
(请参阅:help i_BS
)替换为退格键:
:g/\b/while getline('.') =~ '[^\b]\b' | s/[^\b]\b//g | endwhile
示例输入:
0000000000^H^H^H^H^H^H^H^H^H^H1111111111^H^H^H^H^H^H^H^H^H^H2222222222^H^H^H^H^H^H^H^H^H^H3333333333^H^H^H^H^H^H^H^H^H^H4444444444^H^H^H^H^H^H^H^H^H^H5555555555^H^H^H^H^H^H^H^H^H^H6666666666^H^H^H^H^H^H^H^H^H^H7777777777^H^H^H^H^H^H^H^H^H^H8888888888^H^H^H^H^H^H^H^H^H^H9999999999
输出:
9999999999
答案 1 :(得分:1)
您可以过滤退格,并在vim中查看结果:
cat out.txt | col -b | vim -
答案 2 :(得分:0)
此命令:
$ file out.txt
所示:
out.txt: ASCII text, with overstriking
此命令:
$ cat -v out.txt
显示(为了便于阅读而添加了硬包装):
0000000000^H^H^H^H^H^H^H^H^H^H1111111111^H^H^H^H^H^H^H^H^H^H
2222222222^H^H^H^H^H^H^H^H^H^H3333333333^H^H^H^H^H^H^H^H^H^H
4444444444^H^H^H^H^H^H^H^H^H^H5555555555^H^H^H^H^H^H^H^H^H^H
6666666666^H^H^H^H^H^H^H^H^H^H7777777777^H^H^H^H^H^H^H^H^H^H
8888888888^H^H^H^H^H^H^H^H^H^H9999999999
这个命令:
$ xxd out.txt
所示:
00000000: 3030 3030 3030 3030 3030 0808 0808 0808 0000000000......
00000010: 0808 0808 3131 3131 3131 3131 3131 0808 ....1111111111..
00000020: 0808 0808 0808 0808 3232 3232 3232 3232 ........22222222
00000030: 3232 0808 0808 0808 0808 0808 3333 3333 22..........3333
00000040: 3333 3333 3333 0808 0808 0808 0808 0808 333333..........
00000050: 3434 3434 3434 3434 3434 0808 0808 0808 4444444444......
00000060: 0808 0808 3535 3535 3535 3535 3535 0808 ....5555555555..
00000070: 0808 0808 0808 0808 3636 3636 3636 3636 ........66666666
00000080: 3636 0808 0808 0808 0808 0808 3737 3737 66..........7777
00000090: 3737 3737 3737 0808 0808 0808 0808 0808 777777..........
000000a0: 3838 3838 3838 3838 3838 0808 0808 0808 8888888888......
000000b0: 0808 0808 3939 3939 3939 3939 3939 0a ....9999999999.
所以......退格(^H
)和之前的字符串实际上都是文件的一部分,Vim是一个纯文本编辑器,显示了它的实际内容。
正如所料。