如何在vim中应用退格符号?

时间:2018-05-21 12:05:22

标签: vim

在我的脚本中,我打印退格符号,以便在控制台中实现一些用户界面,如here所述。

效果很好,但现在我想将输出保存到我​​的日志文件中(通过重定向stdout)。当我使用tailless等命令行工具阅读此文件时,我会获得 final '输出视图'我的脚本(在这种情况下是完成的进度条),这种行为对我来说是首选。但是,如果我用vim打开日志文件,它会将所有写入的符号显示到文件中,只需转义为^H的反斜杠。

如何设置我的vim以显示我的日志文件,类似于lesstail

以下是一个例子。

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

3 个答案:

答案 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是一个纯文本编辑器,显示了它的实际内容。

正如所料。