我正在编写一个小程序,以制表符分隔的格式打印输出到终端。但是,每当我选择带有制表符的文本并复制它时,制表符就会被替换为一些空格。
我该怎么做才能使终端在尝试复制时不用空格替换制表符?
我正在编写一个小程序,以制表符分隔的格式打印输出到终端。但是,每当我选择带有制表符的文本并复制它时,制表符就会被替换为一些空格。
我该怎么做才能使终端在尝试复制时不用空格替换制表符?
在Mac OS Sierra(或先前的版本)中,您可以执行以下操作:
Edit -> Copy Special -> Copy Plain Text
less
/more
/git diff
输出的复制都会将制表符转换为空格。 - Curtis Yallop|sed 's/\\/\\\\\\/g;s/\t/\\t/g'
我能在我的 Mac 终端上做到这一点。以下是一些好的测试:
printf '>\t<\n'
:正常工作(将其复制到 Sublime 中作为一个制表符;选中它只能选择整个制表符而不是单个空格)
printf '>\t<\n' | less
:失败
printf '>\t<\n' | more
:失败
printf '>\t<\n' | less | cat
:正常工作(less 检测到输出是文件/管道而不是终端,因此不应用终端设置)
printf '>\t<\n' | less | cat -vet
:输出 ">^I<$"(less 检测到管道输出,因此不应用终端设置)
printf '>\t<\n' | vi -
:失败,但当我在 vi 中移动时,它可以在 1 次按键中跳过制表符,所以它知道它是一个制表符
reset
:从现在开始,它总是失败
stty -tabs
:从现在开始,它总是失败
stty tabs
:修复了 reset
/stty -tabs
问题,现在它可以正常工作了。
有个人通过更改源代码让 less
正常工作:https://unix.stackexchange.com/questions/412060/how-to-get-less-to-show-tabs-as-tabs
less
相关选项:'-U' 显示制表符为 '^I','-x4' 设置制表符大小
对于 git diff
:
git diff | head -40
可以正常工作(将制表符复制到 sublime 中)
git diff | cat
可以正常工作
git diff | less
无法正常工作(less 应用终端设置)
git diff
无法正常工作(我的 git 分页程序是 less)